카테고리 없음

Neural Net

쿼리여인 2023. 10. 19. 17:48

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 함수를 사용하여 개별적으로 움직일 수 있게 함. 

 

함수를 한 번 넣으니 살짝 변함.nonlinear이기 때문에 별도로 움직일 수 있다.
두번 넣으면 더 분리된다.
최종적으로는 분리 가능!

 

 

=> 그렇다면, 오캄의 면도날 문제도 해결할 수 있지 않을까?

신경망에서는 간단한(레이어 적고, 퍼셉트론 적은) 모델이 좋다. 

 


Function Aspect : 2번째 관점

 

XOR 문제 - Linear로는 절대 풀 수 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

퍼셉트론마다 하나씩 배우고

합성함수에서 모여서

결국에는 구분할 수 있게 한다. 

 

 

 

 

 

 


Array Aspect : 3번째 관점

 

합성함수는 딥러닝의 핵심!

 

단순한 함수로 만들면 좋은 점 ? => 파라미터를 쉽게 찾을 수 있다.!

 

딥러닝은 합성함수다. 

# functional programming 은 데이터처리할 때 좋다. 

 

 

linear:행렬곱 -> Array

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

여러개도

퍼센트론을 행렬의 곱으로 표현할 수 있다. => Array 

=> model.weights()로 모양을 확인할 수 있다. 

 

 


수학 관점 : 4번째 관점