일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스몰토크
- Ringle
- 링글경험담
- 영어회화
- 링글커리어
- 성내동장어
- 장어랑고기같이
- 뉴노멀챌린지
- #직장인영어
- 둔촌역장어
- #nlp
- 링글리뷰
- 소통챌린지
- #체험수업
- 링글
- 해외취업컨퍼런스
- #링글후기
- 영어로전세계와소통하기
- 영어공부법
- 강동구장어맛집
- 화상영어
- 영어시험
- 오피스밋업
- #영어공부
- 총각네장어
- #링글
- #Ringle
- CommunicateWiththeWorld
- 영어공부
- #영어발음교정
- Today
- Total
Soohyun’s Machine-learning
[math]: 연쇄 법칙 (chain rule) 본문
위키 백과의 정의
chain rule은 두 함수를 합성한 합성 함수의 도함수(derivative)에 관한 공식이다.
합성 함수 : 두 개 이상의 함수를 하나의 함수로 결합하여 만들어진 함수. 어떤 함수 속에 또 다른 함수가 들어있고, 그 또다른 함수속에 여전히 다른 함수가 들어있다. |
chain rule = 연쇄법칙 = 합성함수의 미분법.
합성함수의 미분은 합성함수를 구성하는 각 함수의 미분으로 곱으로 나타낼 수 있다.
함수 y = f(x)와 함수 z = g(y)를 합성한 함수 의 미분법은 다음과 같다.
위의 식에서의 g'(y) = g'(f(x))를 뜻하고, 두 함수 f(x), g(y)가 모두 미분가능한 함수라는 것을 가정한다.
합성 함수의 미분 공식은 다음과 같이 쓸 수 있다.
이와 같이 그 공식이 마치 사슬이 이어져 있는 것 같다 해서, 합성함수의 미분 공식을 연쇄법칙이라고도 한다.
출처 : http://webcache.googleusercontent.com/search?q=cache:8PaqTCKodBgJ:www.math.snu.ac.kr/~hongjong/c4ns/ChainRule.htm+&cd=3&hl=ko&ct=clnk&gl=kr
e.g. (밑바닥 딥러닝 참고)
위와 같은 합성 함수가 있다. 이 식은 아래와 같이 두 개의 식으로 나눌 수 있다.
1) 2) |
====================우선 아래는 내가 이해한 chain rule이라 틀릴 수 있음.
chain rule은 아래를 말한다.
dL dL dz
---- = ----- * ------- dz가 각각 분모와 분자에 있어서 삭제해보면? 왼쪽 부분과 똑같은 모습이 된다.
dx dz dx 이러한 곱셈의 속성을 이용한 방법이다.
dL/dx를 따로 구하지말고, dL/dz와 dz/dx를 구해놓고 그걸 곱하면 dL/dx가 된다는 것.
L은 최종 출력값, z는 function에서 내보낸 값.
dz
---- (x에 대해 편미분) = 1 (x에 대한 편미분이라 y는 상수로 취급되어서 값이 0이 되고, x의 지수인 1만 폴짝 뛰어내려서 1이 된다.)
dx
dz
--- (y에 대해 편미분) = 1 (y에 대한 미분이라 x는 상수로 취급, 값이 0이 되고, y의 지수인 1만 폴짝 뛰어내려서 1이 된다.)
dy
feedforward를 할 때 수식은 x * W + b이다. ReLU를 제외하고 일단 이 부분만 backprop으로 구현해보면..
x
* +bz
W
Backprop에서 cs231n의 lecture 4의 정리를 보면..
add gate : gradient distributor
max gate : gradient router
mul gate : gradient switcher (mul = multiplication)
y 에서 b로 갈때에는 dz/dz (이건 gradient다.) 이므로 1이 된다. 둘 다 값이 같으니까. (그런데 dL/dz가 되면 다를 수 있다.)
+b에서 * (multiplication node)로 갈 때, add 연산은 그냥 흘려보낸다. 뭘 하든 * 1이기 때문에 그냥 같은 값을 보내면 된다.
* 에서 x로 갈 때와 W로 갈 때에는 x로 보낼때는 W값 * 흘러들어온 값을, W로 보낼때는 x값 * 흘러들어온 값을 해서 보낸다.
(위의 mul gate가 gradient switcher라고 불리는 이유)
그래서 x = W * 흘러들어온 값(여기에서는 1) 이 되고, W = x * 흘러들어온 값이 되어서, x로 보내지는 값은 W, W로 보내지는 값은 x가 된다.
실제 연산 예시
For one-variable functions : multiply derivatives
z = 3y
y = x^2 (x의 제곱)
이면
dz dz dy
----- = ---- ----- = (3)(2x) = 6x
dx dy dx
- 아직까지 exp gate에서는 얘가 어떻게 보내는지 완전히 이해하지 못했다. max는 flip해서 값이 들어온 쪽에 0을 보내고, 들어오지 않은 쪽에는 max값을 보낸다.
- add gate를 제외한.. 일단 multiplication과 exp, max는 값을 연산해주고 흘려보낸다.
- gradient를 넣고 넣는거라.. 이 backprop을 gradient update 공식이라고 봐도 되나?
'Machine Learning > Math & Stats' 카테고리의 다른 글
[statistic]: Two-way tables (0) | 2017.10.19 |
---|---|
[statistic] : mean, median, mode (0) | 2017.10.17 |
[math]: Dell operator, Tensor (기호 설명) (0) | 2017.10.14 |
[math]: 선형 대수 (Linear algebra) (0) | 2017.10.14 |
[math]: 단위 벡터(Unit Vector) (0) | 2017.10.12 |