신경망 알고리즘을 벡터화 한번에 전체 샘플 업데이트 야나두 딥러닝

확률적 경사하강법은 가중치 1번 업데이트 할때 1개의 샘플을 사용하므로, 손실 함수의 전역 최소값을 불안 정하게 찾았다.   

하지만,  배치 하강법은 가중치를 1번 업데이트 할때  전체 샘플을 사용하므로, 손실 함수의 전역 최소값을 안정적으로 찾는다.   

여기에서 가장 핵심적으로 이야기 할 수 있는 그림은 아래와 같다. 

점곱과 행렬곱의 차이



🚚벡터의 연산과 행렬 연산 

   아래 그림과  같이 점곱은 계산 된 것은 확률적 경사 하강법으로 가중치 한번에 한번씩 업데이터 하는 반면에  

점곱과 행렬곱

 

행렬곱은 행방으로 놓인 첫번째 벡터와 열방향으로 놓은 두번째 벡터의 원소를 각각 곱한 후 모두 더하는 것과 같다.   

아래 정방향 벡터와 연산은 알고리즘의 성능을 높인다.  이것은 벡터화 연산 행렬 하는 것으로 배치 경사 하강 법을 적용한다. 

 여기에서 맨 처음 보는 수학기호가 있다.   행렬은 대문자 굶은 알파벳을 표시 한다.   행렬X, 

가중치  W를 곱하는 것은 위의 슬라이드와 같이 나와 있다. 


🚚신경망 알고리즘 대한 벡터화


신경망 알고리즘 벡터화


 한개의 가중치를 한꺼번에  행렬 곱으로 계산을 하니,  속도를 느리지만,  학습곡선이 안정적이다.    위의 그림에서 (m,n) $\cdot $ (n,k) = (m,k)의 예는 아래와 같다. 

   (10, 3) $\cdot $ (3,1) = (10,1) 이다.  

아래의 코드를 보면 아주 간단하게 알 수 있다.   

a = np.arange(0,30).reshape(10,3)
print(a)

[[ 0 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]]

b = np.arange(0,3).reshape(3,1)
print(b)
[[0] [1] [2]]

np.dot(a, b)

array([[ 5], [14], [23], [32], [41], [50], [59], [68], [77], [86]])


a 는  변수 3개의 10개의 행이 있고, b는 3개의 가중치가 있다.    Z 값을 구할때는 np.dot()이나  np.sum() 결과 값은 같다.  하지만  방식은 다르다.   np.sum 루프문을 돌려가면서 하나씩 연산 하여야 한다는 것이다. 


🚚신경망 알고리즘 대한 벡터화

정방향 계산


정방향 계산은 매우 간단한데,  행렬곱의 원리만 알게 되면,   가중치를 30개를 주어서 계산만 하게 되면  364개의 Z 값이 나온다. 

🚚역방향에 대한 벡터화 

역방향에 대한 벡터 화

에러(e) 값은  y 값에서 a값  *a(activation) 값을 빼기 때문에,  364개 값이 나온다.  이것을 구하기 위해서는 $ X^T$ X에 Transpose 취하여야만,  gradient값이 업데이트 된다.   1 epoch 당 가중치(w)가 업데이트 되는 것이다.     

    여기에서는 X 의 (364,30)는 행은 364개이고 열의 갯수는 30개이다.  그리고 Error 값은 (364,1) 인데,  열의 갯수는 364개이고 행의 갯수는 1개이다.    

$g_1$은  위와 같이  x 요소와 e 의 요소를 곱하여 더한 것으로 gradient 값을 구하려면, 전체 샘플 수를 나누어야 한다. 


  이지 퍼플리싱의  Do It! 시리즈인  "정직하게 코딩하며 배우는 딥러닝 입문"  서적을 참고하여 야나두 딥러닝 교육 교재를 만든지 오래 되었다.  1차 강의가 끝났다고,  전부 끝 낼 일은 아닌것 같다. 

   나는 책을 한번 붙들면 한권만 보기 때문에,  구입한 책에서 모든 정보를 얻는다. 



  

댓글 2개:

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...