ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Lecture4_Backpropagation and Neural Networks
    Machine learning, Deep learning 2020. 7. 2. 20:03

    자 이제, 본격적으로 Neural Network내용으로 들어가기 전에 기본적인 BACKPROPAGATION 등에 대해서 배웠다. 참고는 스탠포드의 CS231n 강의를 참고했다. 하... 이제 진도나가고 공부하다보면 겁내 빡시겠지??? 나 경영대생이었는데.... 이거 보고 있어... 재밌다:)

     

    이쪽 세계 발 들인 이상 빠져나가지는 못할거 같아

     

    참고로 데이터라는 분야가 듣기 좋고, 주변에서 하는 분이 있는데 멋져보여서 하려는 분들은 잠시 생각할 시간을 갖길 바랍니다.

    공부할 양이 진짜 진짜 많고, 책도 많이 읽어야 하는 등 투자를 많이 해야하는 분야인거 같습니다!!!

    자기 적성과 맞는지 여부를 판단함에 있어서, 단순히 밝은 미래? 멋져보이는 직무? 등등 외관적인 면을 보기 전에, 직접 혼자서 공부를 하며 자신에 대한 고찰을 가지면 좋을거 같습니다.

     

    아, 참고로 영어 무조건 할 줄 알아야 합니다. 음... 문서들이 왠만한건 다 영어이고, 지금 일하는 팀 사람들도 왠만큼 잘하시는 거 같아....

    왜냐면 강의가 모두 다 영어로 이뤄져 있어서 이다.

     

     

     

    이 방향으로 Input값의 실제 값에 대한 영향력을 구하는걸 Forward Pass라고 한다.

    Forward가 있다면 Backward가 있겠지?

     

     

    이렇게 미분을 쓰면서 구하는게 Backward Pass이다. (즉, Backpropagation)

    초록색: 실제 값

    빨간색: Gradient값

     

    q,f,z는 뭐 바로 바로 미분하면 되지만, x,y는 중간에 이상한게 껴있어서, 바로는 미분 못하고 Chain Rule이라는 방법을 통해서 구해준다. 

    그런데, 방법을 좀 쉽게 생각하면 된다. F로 가는 길을 막고 있는 q를 기준으로 x,f미분 시켜주고 곱해주는 걸로 이해를 했다.

    미분에 대한 기억 떠올리기
    \

    Local Gradient는 Forwar Pass를 통해서 구하고, 메모리 같은 곳에 딱 저장해준다.

    Gradients는 Backward Pass동안에만 구할 수 있다.

    => FP와 BP를 통해서 local gradient 와 global gradient를 구해주고, 이후에 x,y의 gradient값을 BP를 통해서 구해줄 수 있다. 

    => 미분이 필요하겠지?(다음 이미지 참고) 

    => 이와 같은 과정이 여러 번 반복 된다.

     

    여기서 local gradient는 1/x이다. 이거 미분하면? 

    -0.53이 빨간 네모 영역에서 gradient값이 나왔는데, 이게 어떻게 나왔는지를 한 번 생각해보자.

    => 0.73이 우측 실제값, 1.37이 좌측 실제값

    →  좌측 부분을 da, 우측 부분을 dL이라고 가정한다.

    → dL/da가 결국 구하려고 하는 좌측의 gradient값인데, 위의 내용에서 봤을 때 q와 같은 중간의 어떤 매개체가 필요하다. 요 즉, q같은 값이 바로 위에서 살펴본, local gradient이다. 즉, dL/dq * dq/da

    → 위의 문제에서 local gradient를 구하는건 1/x를 사용하면 되고, 이때 x = 1.37로 하고 구하면, -1/1(1.37*1.37) (미분적용) =  -0.53이 q값이 된다.

    → 결국 local gradient * global gradient가 내가 구하고자 하는 좌측의 gradient이기에 답은 (-0.53) * 1 = -0.53이 답이다.

     

    이런 논리는 다음과 같이 이어진다. 그냥 간단하게 local gradient와 global gradient 곱해주면 내가 구하려는 좌측의 gradient구할 수 있다. 이게 꼬리물기 식으로 반복 또 반복 => BP

     

    아래 내용은 조금 different하게 생각하자

    중간 노드에 + 표시가 있는데 이거를 x + a를 미분한다고 생각하면, 1이나오고, 여기에 global gradient를 곱해줘서 내가 구하고자 하는 gradient값을 찾아내자.

     

    옆의 네모는 sigmoid function을 미분한 것

    위의 gradient를 구하려 했던 방식이 sigmoid funtion하나로 하는 것과 비슷하다는 내용

     

     

    add gate => 이전 gradient 값을 그대로 전파(why? local gradient 값이 1이기 때문)

    mul gate => local gradient값이 곱하는 반대쪽의 값이 된다.

    max gate => 큰 놈의 local gradient는 1이 되고, 작은 놈의 local gradient 0이 된다. 그래서 둘 중 큰 값에 1을 곱해서 gradient값을 구해준다.

     

Designed by Tistory.