모든 챌린지
쉬움 0명 해결 정답률 0%

활성화 함수의 도함수

sigmoid, ReLU, Leaky ReLU, tanh의 각 값에서의 도함수를 계산합니다. 역전파에 필요한 기울기입니다.

배우게 될 내용

  • 자주 쓰는 활성화 함수의 기울기 계산하기
  • 시그모이드 출력을 도함수에 재사용하기
  • 역전파에 필요한 요소 준비하기

문제

원문 보기 (영어)

역전파는 기울기에 각 활성화 함수의 도함수를 곱합니다. activation_derivative(name, values)를 구현하고 모든 값에서의 도함수를 반환하세요.

name도함수
"sigmoid"s × (1 - s), 여기서 s = 1 / (1 + e^(-x))
"relu"x > 0이면 1, 아니면 0
"leaky_relu"x > 0이면 1, 아니면 0.01
"tanh"1 - tanh(x)²

입력

name: "sigmoid", "relu", "leaky_relu", "tanh" 중 하나.

values: 활성화 함수의 입력 x.

출력

각 값에서의 도함수를 같은 순서로 반환하세요.

제약 조건

1 ≤ 길이 ≤ 1,000

-50 ≤ 각 값 ≤ 50

예시

예시 1
입력:
name = "sigmoid"
values = [0.0, 2.0]

예상 출력:
expected = [0.25, 0.104994]
입력:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0};

예상 출력:
std::vector<double> expected = {0.25, 0.104994};
입력:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0};

예상 출력:
double[] expected = new double[] {0.25, 0.104994};

설명

0에서 s = 0.5이고 기울기는 0.5 × 0.5 = 0.25로, sigmoid가 가장 가파른 지점입니다. 2에서는 s ≈ 0.880797이고 기울기는 약 0.104994입니다.

예시 2
입력:
name = "relu"
values = [-3.0, 0.0, 4.5]

예상 출력:
expected = [0.0, 0.0, 1.0]
입력:
std::string name = "relu";
std::vector<double> values = {-3.0, 0.0, 4.5};

예상 출력:
std::vector<double> expected = {0.0, 0.0, 1.0};
입력:
string name = "relu";
double[] values = new double[] {-3.0, 0.0, 4.5};

예상 출력:
double[] expected = new double[] {0.0, 0.0, 1.0};

설명

ReLU는 x ≤ 0에서 평평하고(기울기 0) x > 0에서 기울기가 1이므로 결과는 [0, 0, 1]입니다.

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.