티스토리 뷰

이번 수업에서는 거의 본격 neural network 해부 수업?! 간단하게 Word window 를 이용해서 해당 단어가 Named entity 인지 아닌지를 classify 하는 모델을 통해서 neural net 에서는 어떤 식으로 parameters 가 업데이트 되는지를 살펴봤다. 이번 수업을 통해서 좀 더 확실히 뉴럴넷이 back propagation 과 forward propagation 으로 이루어지는지 조금 더 잘 이해할 수 있게 됐다고나 할까?! 이번 강의 포인트



  1. 러닝 모델의 수식은 거의 항상 매트릭스를 기준으로 표현된다. 인덱스를 사용하지 않아도 돼서 간단하게 표현 가능하기 때문! 이번 수업에서는 Matrix 와 그 안의 elements 를 넘나들며 이해함! Matrix 로 표현하는 게 이해하기 어렵다면 그냥 하나의 element로 풀어서 보자!


  2. 왜 데이터를 matrix 로 나타내나? Matrix 를 사용하는 이유 - training data 의 instances 내에서 loop 를 돌며 하나씩 곱하면 되지 않나? (예 - 학생 1 - 수면시간, 아침식사 여부, 운동 시간, 성적, 학생 2 - 수면시간, 아침식시 여부, 운동시간, 성적). 왜 굳이 matrix 를 사용하지? -> Loop 보다, matrix 끼리의 곱셈연산이 훨씬 더 빠르기 때문. 그래서 모든 data 를 하나의 matrix 에 욱여넣고 하는 거임 (그래서 어려웠군..) 


밑에 코드에서 간단히 input X 와 weight W 의 dot product 를 구하는 연산만 할래도 초록줄 (matrix 곱) 이 빨간줄 (각각의 단어 - word vector 로 표현된 - 마다 loop 을 돌며 W 와 doc product 구하는 것) 보다 훨씬 빠르다는 것을 알 수 있다. 이런 감이 없다면 코드를 직접 돌려보는 게 좋은 경험! 




1. Neural networks 의 원리 

1.1 뉴런 하나 & 뉴럴 네트워크 

사실 하나의 뉴런은 단순하게는 logistic regression unit 이라고 볼 수 있다 (충격)! 수식에서 처럼 이고 여기서 함수 f 는 element wise 로 적용되는 함수인 것! 





하나의 뉴런을 여러 겹으로 쌓으면 그게 neural net 이 되는 것! Layer 2 의 a1, a2, a3 이 hidden unit 이고, 최종 출력된 Layer 3 (Output layer) 의 값이 ununormalized 된 score 이다. (확률을 구할 때는 항상 softmax 를 통해서 normalized 를 해주는데 출력 값이 continuous 한 값일 때는 - regression : 학생의 성적 -  un-normalized한 score 를 써도 되나 봄) 




1.2 왜 각 Neuron 에는 활성함수가 들어갈까? 

활성함수는 결국 함수에 비선형을 더 하는 것임! 그냥 선형 함수 여러 개를 합쳐서 여러 layers 를 쌓아봤자, 결국은 선형이기 때문에 (그럼 선형 여러개가 합쳐지면 뾰족한 곡선이 되나?) 결국은 한계가 있다. 비선형 함수의 경우 밑에 보이는 이미지에서와 같이 Layer 가 늘어날 수록 (M=1, 3, 10) 함수에 비선형이 더해지는데, 그럴 수록 실제 존재하는 복잡한 데이터 선과 가까워진다! 



2. Parameter 업데이트 - 미분을 통해서 

Word window classification 을 통해서 Named entity recognition 을 구하는 task 를 통해서, 뉴럴 네트워크 내부에서 parameters 의 업데이트가 어떻게 이루어지는지 살펴보자! 

Word window 를 하나씩 옮겨가며 가운데 center word 가 Named Entity 인지 아닌지를 구하고자 하는 모델이 있다고 치자 (사실 이런식으로 하나의 단어 ex) Paris 를 classify ex) Named entity - True 하는 경우는 많이 없다고 한다). 

이따가 좀 더 deep 하게 들어가서 하나의 element 마다 미분을 구할 거니까 각 파라미터와 인풋에 대한 shape 을 집고 넘어가도록 하자. 
우선 인풋 x 는 column vector 인데 (각 column 이 instance ex) 학생1, 이고, 각 row 가 해당 instance 의 변수 ex) 수면시간, 아침식사 여부, 운동시간). 우리는 여기에서 모든 윈도우 단어들과 센터 워드가 concatenate 된 column vector 를 input 으로 쓸 거임. 그래서 하나의 윈도우는 20 x 1 로 표현된다. 

그리고 hidden unit 은 마찬가지로 column vector 이고 8 x 1 로 나타낸다. 

그리고 최종 score 는 히든 unit 에 parameter U (1 x 8) 를 곱해 얻어진 un-normalized score (활성함수도 없음 - 아마 여기서는 미분을 간단하기 위해서 안 쓴 듯) 



업데이트 해야 될 파라미터는 총 3가지 - W, b, X ( W만 업데이트 하면 되는 줄 알았는데, X 는 word vector 라서 그것도 파라미터인듯). 이번 수업을 통해서 이 3가지 파라미터 (각각의 매트리스 내의 모든 값) 를 업데이트 하는 방법을 살펴볼건데, 좀 더 간단하게 하기 위해서 인풋 갯수와 dimension 을 좀 더 줄여보자. 밑에처럼 window = 1 이라서 input words 는 총 3개고, 각각의 word vector dimension 은 걍 1.  더 간단히 하기 위해서 x instance도 그냥 한 개라고 치자. 그리고  hidden unit 은 2개임. 




여기서 총 update 해야 하는 파라미터를 다시 한번 정확히 하면 


1) Hidden unit 을 만드는 W matrix  - column vector 인데, 다른 column vector 와 곱해줘야 해서 역행렬을 씀. 



2) Hidden unit 을 만드는 b - column vector 


 

3) Word vector X - column vector 



에 대해서 각 matrix 의 모든 element 를 update 하는 방법을 낱낱이 살펴보자!


2.1 최종 score 를 parameters 로 미분하자! - W 

2.2 최종 score 를 parameters 로 미분하자! - b

2.2 최종 score 를 parameters 로 미분하자! - input X 





이렇게 모든 미분값(혹은 에러시그널)이 구해지면, 각각 파라미터가 업데이트 될텐데 이 파라미터들은 순차적으로 업데이트 되는 게 아니라, 병렬적으로 업데이트 된다고 함! (이해는 잘 안 되지만)


그리고 back propagation의 연산이 빠른 이유는, 이미 forward propagation에서 구해놓은 값을 다시 재활용해서 쓰기 때문. 처음부터 다시 계산할 필요가 없기때문에 빠른 거임! (놀라움)  


예를 들어 시그모이드 함수의 back propagation -f'(x) = f(x){1-f(x)} -서 쓰이는 f(x)값은 이미 forward propagation 에서 썼음! 그냥 갖다쓰면 됨 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함