아래에 코드 구현은 깃허브에 있습니다(코드 해석)
신경망
신경망에 대해서 주로 사람의 뇌구조와 닮았다는 표현을 많이 쓰는데 교수는 이러한 신경망을 단순히
클래스 형태로 바라보라고 합니다
아래의 내용은 여태 강의를 보면 자주 봤을 기존의 스코어 함수에 대한 내용이 적혀있습니다
이제부터 봐야하는 내용은 신경망의 형태인데요 가장 심플한 신경망의 형태로 보겠습니다
2개의 레이어로 된 신경망에서는 기존에 스코어 함수 하나로 끝나던 것이, 그 결과값이 다음 W2 레이어로 넘어갑니다
이때 그대로 넘어가는 것이 아닌 0과 비교하여 Max 함수가 적용된 상태에서 W2의 값으로 가게 됩니다
여기에서 Max함수(non-linear function)는 저희가 노드를 하면서 사용했었던 activation 함수의 역할을 하는 친구인데 신경망에 비선형성을 주기 위해 있는 함수입니다(없으면 여러개 해봐야 하나의 선형 함수와 같이 나온다) 그 뒤에 다시 W2 선형 레이어를 추가한 후에 벡터 점수값들을 얻게됩니다
입력 레이어 X는 3072개의 값에서 h(hidden_layer)는 100개의 feature값이 될 것이고 s(output_layer)는 10개의 값으로 나오게 됩니다
그림을 보면 이전에 classifier의 가중치를 그림으로 확인했을 때 말머리 형상이 두개로 보였던 것을 볼 수
있습니다. 이는 단 하나의 classifier로 여러 종류의 말 그림을 상대하려다보니 나타나게 된 현상이었는데요
여기서 h는 hidden_layer로서 각각 하나의 classifier의 역할을 담당할 수 있습니다
임의로 값을 조정할 수 있는 부분이기 때문에 hyper_parameter의 역할로 볼 수 있습니다(그리고 우리가 구해야 하죠)
위에 설명한 내용에 따라서 2개의 레이어, 3개의 레이어도 가능합니다 식은 W3이 늘어난거(더 깊어지는 것) 외에 특별하게 달라지는 점은 없습니다
코드의 의미를 해석해봤습니다
특히 오차 역전파에 대한 이해를 높이기 위해 직접 대입해서 그려봤습니다
확실히 그려보니 이해가 빨랐습니다
코드와 대조해서 그림으로 이해해보시길 권합니다
w2와 h를 지나고나면 w1과 만나기전에 w1의 활성화 함수였던 시그모이드를 거쳐야 합니다
우측 위에는 시그모이드 내부의 게이트들이 나와있는데요.
저 게이트들을 미분하면서 거치면 사실 그림 아래에 나와있는 복잡한 형태를 거쳐야 합니다만
이미 맨 마지막에 나와있듯이 시그모이드 함수를 미분하는 것은 1-시그모이드함수의 결과값, 즉 저희
예제에서는 h가 되겠죠 따라서 (1-h) * h 를 하게 되면 간단하게 시그모이드 함수를 미분한 값을 구할 수
있습니다. 더불어서 h의 그라디언트 값을 곱해주면 시그모이드 게이트를 지난 값을 얻을 수 있습니다
여기서부턴 다시 간단합니다
x의 그라디언트를 얻기위해 w1과 곱을 하고, w1의 그라디언트를 얻기위해 x와 곱을 하면 됩니다
가중치 업데이트
그렇게 구해진 x와 w1의 그라디언트를 Learning Rate의 수치만큼 곱해서 각 w1, w2의 가중치에서 빼고
다시 값을 넣어주면 가중치의 업데이트까지 마무리 됩니다
느낀점
머신러닝 엔지니어로서 가장 핵심은 수학적인 개념을 코드에 입히는데에 있다고 생각을 했습니다
그래서 4강중에 코드가 구현되어 있는 부분에서 수학적인 개념이 어떻게 나오게 되었는지
하나하나 따져가며 주석을 달고, 그림까지 그려가며 이해해보고자 노력했습니다
해당 강의의 교수도 그렇고, 강의를 블로깅 한 사람들이나, 유튜브에서는 코드와 관련한 내용을
대체로 스킵하거나 간단하게만 언급하고 지나갔기에 파편적인 지식들을 모아서 직접 조립을
해야해서 시간도 꽤 걸렸습니다
그러나 그만큼 수학에도, 코드에도 몰두 할 수 있었고 오차역전파의 원리와 기능 구현 방법에 대해서
명확하게 알 수 있었습니다
월요일 풀잎시간에 발표를 앞두고 있는데 저처럼 몰랐던 사람들이 최대한 쉽게 이해하도록
발표 준비해보겠습니다
포기하지 않고 끝까지, 화이팅!
'23년 이전 글 > Flipped learning' 카테고리의 다른 글
Lecture 6 Training Neural Networks part I (0) | 2022.01.24 |
---|