Neural Net
Regression : 1805년도에 나온 개념.
[뇌 과학]
생물학적 뉴론들이 저마다 생김새가 다름 -> 뉴론의 종류가 다르다.
뇌 신호가 linear하지 않음
모델링의 첫 번째 내용 : 실제 복잡한 현실의 세상을 바로 표현할 수 없다.
고로, 단순화 하자.(no-free lunch )
여러 뉴론이 합쳐져서 다음 뉴론으로 전달됨.
하나로 합쳐진 값 (자극) 이 일정이상 넘어가면 행동하고, 그렇지 않으면 행동하지 않는다. (역치)
10이 합쳐 졌어도, 10이 전달되는 것은 아니다. -> w (전달되는 특성)
(x란 자극을 받았을 때, w를 곱한 만큼 전달된다.)
저마다 역치가 다르다. -> 자기가 가지는 고유한 bias -> b
0보다 크면 1, 0보다 작으면 0으로 classification도 가능하다. (활성화 함수가 sigmoid라면, logistic)
이렇게 분류하는 이유는, 생물학적 관점에 유사하기 위함이다.
regulaization 도 가능.
'AND' , 'OR' 연산이 되는지 확인해본다.
'and'는 둘 다 조건을 만족해야 1. 부등식에서는 수천만개의 값들이 나올 것.
그 중에서도 svm 알고리증을 사용하면 가장 margin이 넓은 값 한 개만 찾아낸다.
'or'는 둘 중 하나만 만족해도 1. 역시 엄펑나게 많은 해를 찾을 수 있다.
'and', 'or'를 흉내 냈으므로(;not'도 가능하다.) -> 드디어 사람을 흉내낼 수 있을 것이다. (사람의 두뇌의 비밀을 해결할 수학적 모델이 발견되었다고 생각)
인간의 지능을 연역적으로 사용한 것 -> logic (simbolic ai) : knowledge 기반/ connected : data 기반.
[ 비판 ]
XOR 문제를 직선으로 풀 수 없다. (non-linear) -> 곡선으로 regression 모델을 만들어야 한다.
한계가 명확히 보여서 70년도에 뉴럴 네트워크에 암흑기 도래.
-> non-linear를 합칠 수 있다. : 뉴럴 네트워크의 합을 활성화 함수 쪽에 non-linear 함수를 집어넣어버리자.
= logistic regression
[logistic regression]
승산 = 일어날 확률 / 일어나지 않을 확률 = p / (1-p) = A ( 0<= p <= 1 )
p = (1-p) A
p + Ap = A
p = A/(1+A)
log를 취하면 -inf < log(p) < inf 로 범위가 바뀜.
log(p) = A/(1+A)
p = e ** (A/(1-A))
non-linear를 적용하면 초록색 그래프(sigmoid) 가 나와서 검정과 빨강을 구분할 수 있게 된다.
=> [logistic regression]
y = ax+b
x를 치환해서 Intrinsically Linear을 linear로 간주한다.
=> logistic regression은 결국 classification문제를 해결하기 위해서 등장한 것.
- 현실세계를 잘 반영한다
- 오른쪽 끝을 내려보면, 정규분포와 비슷해짐
- 값이 가장 많은 가운데에서 급격하게 기울기가 변화.
linear는 2가지를 분류할 때 사용한다.(3개 분류 못 한다.)
- one vs rest :
3가지 방법으로 나누어 보았을 때, ? 가 가장 많이 포함되는 빨간색으로 분류한다.
- one vs all :
2개씩만 비교했을 때(나머지는 무시), 가장 많이 나온 값으로 처리.
newral network에서 성능을 높이려면
Layer가 많을수록 복잡한 representation을 표현할 수 있게 된다. -> 데이터가 많이 필요하게 된다. -> 오버피팅이 생긴다.
perceptron에서 성능을 높이려면
개수를 늘리면 된다 -> 오버피팅이 생긴다.
오버피팅이 생기지 않으려면? 사람이 조정(제어)해야 한다. => algorithmic model
하이퍼파라미터 2개이면 복잡도는 훨 씬 더 잘 나온다.
하이퍼파라미터 4가지 ( )
MLP [[A]NN] : Multy Layer Perceptron
[multy layer perceptron] 에서
Layer가 작은 것 = shallow network
Layer가 많은 것 = deep network
-----------------------------------------------
+ = Deep Learning
** input layer는 layer가 아님.
1-hidden-layer Neural Network : output layer 를 제외한 표현. (1-layer라고도 표현할 수 있으니, 문맥에 맞게 이해하자)
data가 흘러가는 표현을 flow한다 라고 표현. -> 방향 = feed forward = flow : prediction과 같음 (모델이 낸 결과값)
** 나의 목적 : input값을 입력했을 때, 원하는 결과를 도출해내는 것.
복잡하면 복잡할수록, 아주 복잡한 형태의 데이터도 만들 수 있다.
input 에서 hidden 으로 가는 activation 함수dp non-linear을 넣는다. => non-linearity
왜? linear의 합성함수는 또 linear이기 때문에 의미가 없다.
[ 발전 토대 ]
neural network
-> XOR 문제를 풀 수 없다.
=> non-linear 함수 사용해서 해결.
기본적으로 layer를 늘리면, 성능이 좋아야 하는데, 그렇지 않다.
-> sigmoid 때문.
x축 값이 너무 크거나 작으면, 기울기가 0이 됨. = Gradient Vanishing
-> 학습이 똑바로 안 됨.
-> layer를 많이 쌓을 수 없다.
=> shallow network를 만듦.
=> deep network도 만들 수 있음.
Q. 왜 뉴럴 네트워크가 성능이 좋은가?
1. 구조 + nonlinearty
2. Universial Approximation Theorem
: Large enough DNN with nonlinear activations can theoretically approximate any continuous function
(충분히 큰 Deep Neural Network는 이론적(수학적)으로는 세상의 어떠한 함수도 근사하게 만들 수있다.)
<= model hyperparameter
3. Memorization Capacity
: Model with more parameters will have more ”Memorization Capacity"
: parameter ( = layer & pereptron)
Data Aspect : 첫 번째 관점
EDA를 하는데, 굉장히 복잡하다. = 간단한 알고리즘은 풀 수 없다.
-> 복잡한 알고리즘을 사용하자. = 레이어를 많이 사용. (레이어 = 함수)
-> nonlinearty activation 함수를 사용하여 개별적으로 움직일 수 있게 함.
=> 그렇다면, 오캄의 면도날 문제도 해결할 수 있지 않을까?
신경망에서는 간단한(레이어 적고, 퍼셉트론 적은) 모델이 좋다.
Function Aspect : 2번째 관점
퍼셉트론마다 하나씩 배우고
합성함수에서 모여서
결국에는 구분할 수 있게 한다.
Array Aspect : 3번째 관점
합성함수는 딥러닝의 핵심!
단순한 함수로 만들면 좋은 점 ? => 파라미터를 쉽게 찾을 수 있다.!
딥러닝은 합성함수다.
# functional programming 은 데이터처리할 때 좋다.
linear:행렬곱 -> Array
여러개도
퍼센트론을 행렬의 곱으로 표현할 수 있다. => Array
=> model.weights()로 모양을 확인할 수 있다.
수학 관점 : 4번째 관점