728x90

그동안 ppt로 강의 내용을 정리하고 있었는데 오늘 부터는 블로그에다가 그대로 하려고한다.

 

계속 똑같은 사진 복붙하기가 너무 힘들어

 

 

지금까지 데이터 전처리에 대해서 봤고 다음으로 다룰 내용은 가중치 초기화에 대해서 다뤄보겠습니다. 여러분들이 신경망을 학습할떄마다 맨 처음에는 어떤 방법으로든 가중치를 한번 초기화를 해줘야 해요.

 

 

 

 한번 질문을 하면, 우리가 가중치와 편향을 0으로 초기화하면 어떤일이 벌어질까요? 아마도 아주 안좋은 결과가 나오게 됩니다. 왜냐면 가중치와 편향이 0이라는건 ReLU나 다른 비선형 활성화 함수들의 출력값들이 0이 될것이고, 그러면 입력 값으로 뭘 받던간에 그라디언트가 0이되버려서 멈춰버리겠죠.

 

-> 가중치 행렬이 모두 0이 되면 출력이 0이 되니, 해당 층에 대한 로스의 그라디언트도 0이 되는건 당연할거같다.

 

 

 

 그래서 실제로 사용할때는 이런 문제 때문에 0으로 초기화 시켜서는 안돠요. 0이나 특정한 상수로 초기화해서 생기는 문제, 대칭 깨짐symmetry breaking이 일어나지 않거든요.

-> 가중치 행렬의 모든 원소를 0 혹은 특정한 상수로 다 채워버리면 행렬 자체가 대칭해져버리기 때문

-> 대칭 깨짐에 대해 검색했더니 물리학적인 용어가 나오는데 행렬 원소들이 다 똑같아, 대칭이되니 대칭깨짐이 없다고 말하는거같다.

-> 아니면 가중치가 모두 같은 값을 가지면 가중치의 대칭이 깨지는 식으로 학습이 되지 않아 대칭 깨징이 없다고 하는거같기도 하고

ref : en.wikipedia.org/wiki/Symmetry_breaking

 

 

 왜냐면 훈련 셋이나 다른 뉴런들을 구분할수 없게 됩니다.

-> 모든 뉴런들이 같은 가중치를 가지고 있으면 학습이 되지 않을거고, 훈련 데이터를 구분할수도 없고/뉴런도 다 똑같아 보여서 그런가 싶다.

 

 

 그래서 상수값으로 초기화를 시키면, 어떤 훈련 데이터가 들어오더라도 모든 그라디언트가 같다보니 학습을 실패하게 되는 경우가 흔하게 생겨요. 그렇게 되면 신경망은 뭘하던간에 학습을 할수 없을거에요.

 

* 이전에 그라디언트 계산하는걸 정리하기는 했는데 다시 그리자니 감이 안잡히고 한번, 가장 간단한 계산그래프로 그려봣다.

모든 x의 그라디언트가 2가 되기는하지만 w의 경우 별 이상이 없어보이는데 한번 행렬의 경우 어떻게 되는지 봤다.

 

 

 

 

* 이전에 역전파 강의에서 본 행렬곱 연산을 참고해서 가중치 행렬을 똑같이 줬을때 어떻게 되는지 보자

 

 

일단 아래의 간단한 2층 신경망의 예시에

 

첫번째 가중치 행렬은 전부 2, 두번째 가중치 행렬은 전부 1을 주어 순전파 계산을 마치고,

 

출력의 두 원소가 (18, 18)로 동일하므로, 출력 Y에 대한 비용도 (5, 5)로 해주었다.

* 은닉층의 값부터 다 같아지기 시작하면서 일반적인 신경망 연산과는 다르게 진행되고 있다.

 

그러면 2번째 계층의 그라디언트와 이전 층으로 역전파 시킬 그라디언트를 아래의 식으로 구할수가 있는데

 

 

 위 식으로 은닉층에 대한 그라디언트와, 두번째 가중치 행렬에 대한 그라디언트 결과를 얻을수가 있었다.

이제 첫번째 완전 연결 계층의 가중치 행렬을 구할 수가 있었는데,

 

업스트림 그라디언트가 (10, 10, 10)으로 들어오는 바람에

 

첫번쨰 가중치 행렬의 그라디언트도 일반적인 가중치행렬의 그라디언트가 되지를 않고

 

대칭적인 형태가 보인다.

 

이런 이유로 가중치 행렬의 모든 원소들을 0이나 특정 상수로 초기화 하는 경우

 

가중치 행렬의 그라디언트들이 대칭 행렬이 되어버려

 

no symmetric breakinig -> 대칭 깨짐이 발생하지 않는다고 한것같다.

 

아무튼 일반적으로 생각하는 대각으로 대칭은 아니긴하지만

 

행렬들이 이런식으로 되면 학습이 안될수 밖에 없을거같다.

 

 

오늘 딥러닝은 여기까지.

300x250

+ Recent posts