Soohyun’s Machine-learning

신경망에 대해 이해한 것 본문

Machine Learning/misc

신경망에 대해 이해한 것

Alex_Rose 2017. 9. 20. 12:40

feedforward NN으로 해보자    (굳이 신경망이 아니라 feedforward NN이라고 쓰는 이유는, 신경망에 backpropagation 형태도 있기 때문)



먼저 x 라는 값이 있다. 그리고 y라는 label (일종의 정답지)이 있다. 그리고 Weight (가중치)이 있으며, bias (편향)이 있다. 


이 x라는 매트릭스 (array, 벡터, 행렬.. 어떤 형태든지간에 일단은 floating point든 integer든 숫자들의 집합)가 Weight과 곱해진다. 

weight 값을 그럼 어떻게 줘야 하느냐. 그냥 numpy의 random.randn / random.uniform / random.normal 등을 써서 랜덤한 값을 줄 수도 있고..

tensorflow를 써도 numpy와 비슷하게 해서 랜덤값을 줄 수 있다. Pytorch는 아직 잘 모르겠지만 아마 비슷한 형태이지 않을까 싶다. 


랜덤말고 어떤 값을 주고 싶다면 He 초기값이나 Xavier 초기값을 주면 된다. 얘가 이미지 넷에서 큰 역할을 한 애들이라는 것만 알고 있다. 



공식 : y = x * W 



bias는 일단 제외했다. 아직 얘가 왜 있는가에 대한 정확한 이해가 되지 않았다. 




x의 형태(shape)는 Weight과 bias의 형태에 영향을 끼친다.     (shape을 맞춰줘야 한다. 그런데 이거 맞추기가 정말 까다로운 것 같다)


x = np.array([1, 2, 3])


y의 형태는 one-hot encoding이라는 방법으로 할 수도 있고 (해당 index, 즉 위치 정보를 반환), 얘의 확률을 반환할 수도 있다. 




어쨌든 x * W를 해서 나온 값과 y (label)을 비교한다. 이때 사용되는 것이 loss function ( =cost function )이다. 

loss function으로는 MSE (mean-squared error) 또는 CEE (cross-entropy error)가 있다. error는 차분인가.. 뭐 그런 단어로도 쓰이는 것 같으나 비전공자인 나로서는 그냥 실제값과 예측값간의 차이로 이해하는게 훨씬 좋은 것 같다. 더 직관적이기도 하고.


(예전에 gaussian loss라는 단어를 봤는데, 얘가 의미하는게 정확하게 어떤건지 모르겠다. 아마 이 cost function과 관련있는 듯 한데...)


강의때 가장 많이 들은걸로는 mean-squared error (이거 발음이 좋다 ㅎㅎ)인데, 예측값과 실제값을 뺀 다음에 제곱하고 그걸 평균내준 값이다. 그 평균값이 높으면 이걸 낮춰줘야 하는데, 그런 이유로 사용되는 것이 gradient descent 알고리즘이다.  (이게 정확하게 맞는 말인지는 모르겠다.) 이 gradient descent 알고리즘 중에서는 Adam optimizer가 가장 많이 사용되며, RMSProp (Adagrad), Adam, SGD 등등도 있다. 


그렇게 해서 나온 값을 넣고 minimize (평균값이 줄어들 수 있도록 해주는 것) 해준다. 


그러면 알아서 optimization이 되는데 이게 내부에서 도는 것인지 아니면 따로 weight과 bias로 넣어줘야 하는가는 잘 모르겠다. (내부 로직을 알아야 하는 부분이니까) 




여기 곱셈에서 gradient descent를 위한 위치를 얼마만큼 움직일가를 결정하는 것이 learning rate 이다. 



'Machine Learning > misc' 카테고리의 다른 글

용어 이해  (0) 2017.10.13
신경망 뼈대 구축하기  (0) 2017.10.13
머신러닝 잡다 정보  (0) 2017.10.09
머신러닝 자료 링크들  (0) 2017.10.09
텐서플로 GPU / 윈 10 설치  (0) 2017.09.17
Comments