딥러닝 관련해서 질문 글들을 볼때마다

너무 어렵게 생각하는것 같다는 느낌이 들어서 개념은 의외로 단순하게 생각할수 있어서 간략히 설명해봄.

난 ai쪽 전공자는 아니지만 밑바닥딥러닝 책을 독학해서 수식을 전개하고 numpy로 코딩해본 경험.

 

 

- 신경망 구조에서 forward 함수로 오차함수 정의: E(c, 입력데이터set, 출력데이터set)

  E 함수는 1950년대 쯤에 이미 발명된 함수. 신경망 구조에 따라서 정해지는 함수.

  c 는 노드 연결선마다의 weight 와 bias들을 모두 모은 미지수벡터.

  E 값의 의미는 주어진 출력데이터set 와 {입력데이터set, c벡터}로 계산한 출력set 과의 오차를 모두 더한 값. (제곱)

 

- 딥러닝 학습 목표: {입력,출력} 데이터 쌍들이 주어질때 E 값을 최소화 하는 c벡터를 구하면됨.

 

- c벡터를 구하는 방법은 여러가지 있을수 있음.

 . 가장 단순 무식한 방법은 c_i 값 각각을 -1e9~1e9 범위를 1e-9 마다 증분시킨것들을 모두 계산해서

   이중 최소 E의 c벡터를 선정.

 . 유전알고리즘

 . 기울기 구해서 반복 찾기

 

- 기울기 구하는 방법도 여러가지 있을수 있음.

 . 단순 무식한 방법: [E(c_i + d) - E(c_i - d)] / (2 * d) ~ 아래 역전파 검증 용도로 사용가능. d는 1e-7 같은 작은값.

 . 수식 자체를 편미분한 수식으로 전개해서 이걸 코딩해서 기울기 구하기 - 신경망의 규칙성을 이용하면 역전파방법이됨.

 

 

실제 딥러닝할때 쓰는 방법은 마지막 방법임. 다른 방법도 동일한 결과를 얻을순 있지만, 이 역전파 방법아닌 방법으로는 몇배, 심지어 몇억경만배 더 시간이 걸림.

 

역전파 수식화를 전개해보면, 여러층을 거치는 수식을 편미분 하는거라서 편미분을 알고있으면 그 규칙성만 잘 따지고, 텐서 정의만 잘하면, 그냥 노가다임. CNN은 2d 층이 있어서 더 복잡하지만 이것도 마찬가지.

 

그리고 위에 설명한 방법은 개요라서, 실제 딥러닝할때는 수렴성, 메모리 용량, 계산시간 등을 고려해서 다양한 기법들을 쓰곤함. 가령 dropout, 배치학습 등등. 근데 뼈대는 위에 설명한 방법.

 

써놓고 보니 설명이 충분치 않아서 이것만 보고는 어쩌면 오히려 머리가 더 복잡해질수도 있긴할듯.

딥러닝 공부할때 잠깐 참조하면 도움될지도.

원래는 좀더 자세하게 쉽게 이해되게끔 쓸까했는데, 이정도로 간단하게 쓰는데도 설명하니까 거의 1~2 페이지가 되어서, 더 길게쓰면 간단한게 아니라 복잡한거라고 오해할듯.

 

 

난 간단한 딥러닝, 간단한 강화학습 정도 독학한 수준인데,

LSTM, GAN 등등 다른 이론들도 좀 궁금하긴함.  누군가 이런식으로라도 좀 쉽게 설명해줬으면 좋겠음.

일본은 양자역학 등도 전문가가 일반인들에게 가르쳐서 일반인들이 나름 이해한걸 쉽게(?) 책으로 내기도 했음.

 
난 전문가가 아니어서 오류가 있을수 있으니 지적해도 무방.