Deep Learning 역사

2021. 9. 16. 18:55ai/Deep Learning

728x90

perceptron을 다중 Layer (MultiLayer)로 사용하면 학습이 가능 (xor예제)

→ 가장 큰 문제는 "시간이 오래걸린다"   → 결국 machine learning 1차 침체기

 

→ 1974년에 (폴 웨어보소) 가 "획기적인 논문을 발표" 하지만 "외면" (아무도 안하고 있어욬)

→ 1982년에 다시 논문 발표 (아무리 생각해도 자기가 맞다고 생각)  → 반응 x

 

→ 1986년에 (제프리 힐튼교수) "이 논문에 대한 재조명"  → 정말 되네요 ! 너무 좋아요 ! (machine Learning의전성기)

그래서 86년 이후 편미분이 아닌 이 개념을 사용한다. 이 개념이 

"오차역전파 (Backpropagation)" : 뒤쪽layer에서 앞쪽layer로 w와 b를 편미분이 아닌 Matrix(행렬곱)으로 수행

 

feed forward , propagation : 입력(input)해서 쭉 통과해서 출력(output) 

 지금까지는 w,b가 적었으나 NN들어오면서 편미분할 양이 늘어나서 시간이 너무오래 걸린다

이 문제때문에 침체가 이루어졌었으나 오차역전파로 해결

 

우리나라에는 1990년 초중반에 들어왔다 → 대학교에도 "AI"학과 붐 이였다가 오차역전파 또다른 문제에 봉착

Back propagation(오차역전파)는 Neral Network에서 Layer를 많이 사용하면 할수록 성능이 ↓ 저하

여러가지 이유가 존재하지만 가장 큰 이유는 "Vanishing Gradient" 문제때문

 

Vanishing Gradient :오차역전파가 진행되면서 W,B가 update되는데 뒤쪽 Layer의 W,B는 정상적으로 update가 되는데

                            앞쪽 Layer로 올수록 Update가 잘 안되요!!

원인 : Sigmoid - 입력으로 들어오는 값이 어떤값이던 상관없이 0~1사이로 변해요

                      어떤 수에 1 이상을 곱하면 커지지만 1 이하이면 값이 점점 줄어들기 때문

 

결국 Vanishing Gradient 문제 때문에 Neral Network이 망해요 !! -2차 침체기

machine learning의 가장 큰 NN이 망하면서 여러가지 알고리즘들이 등장

- Regression

- KNN

- SUM

- Decision Tree

- Random Forest

- naive bayes 등등..

 

1995년 AI권위자중 한분인 "르쿤" 왈 - Neral Network보다 다른 알고리즘이 더 좋아요 !!

 

 

CIFAR (Canadian Institate for Advanced Research [캐나다 앞으로 발전가능한 연구 국립기관] ) 펀딩을해요!!

"Hilton"이 canada로 이주해서 연구를 지속

 

연구 10년뒤인 2006, 2007년 논문을 발표 

1. Initialization (초기화) : Weight의 초기값을 random으로 하면 안되요!!

2. Activation Function(활성화 함수) : Sigmoid는 문제가 있어요!!

 

하지만 Neral Network은 망한전력이 2번 있어요!

그래서 사람들이 불신가득해서 rebranding해서 나온것이 Deep Network  /  Deep Learning

그러나 특성상 over fitting과 시간은 피할수 없다

 

# - weight의 초기값을 random이 아닌 2가지 기법 중 하나를 이용

#   => Xavier 초기화, He's 초기화(Xavier 초기화의 개량버전)

#      weight의 값을 랜덤으로 하지 않고 계산하는 기존에 사용한 복잡한 수식이 존재했었어요.

#      그래서 2가지 알고리즘이 나왔는데 그게 Xavier 초기화, He's 초기화

#      입력의 개수와 출력의 개수를 기반으로 적절한 수식을 이용해서 초기값을 지정.

 

#       W = np.random.randn(input의 개수, output의 개수) / np.sqrt[루트](input의 개수)     

#       W = np.random.randn(input의 개수, output의 개수) / np.sqrt(input의 개수 / 2)

 

# - activation function을 기존의 sigmoid에서 relu(Rectified Linear Unit) [0이상] 변경 

 

 

 

'ai > Deep Learning' 카테고리의 다른 글

CNN 기초, 이미지 처리  (0) 2021.09.17
MNINST (Deep Learning 역사 ver) [he's intializer]  (0) 2021.09.17
MNIST Multi layer ver 코드  (0) 2021.09.16
Multi layer (NN기초) 코드  (0) 2021.09.15
MLP [ Multi layer perceptron (NN기초) ]  (0) 2021.09.15