programming/파이썬으로 배우는 통계학

사이킷런을 활용한 머신러닝(model_selection / preprocessing) - 선형모델과 신경망_[파이썬/머신러닝]

Jofresh 2023. 6. 3. 18:56
728x90
반응형

이번에는 신경망의 기본적인 구조를 소개하겠습니다. 그리고 파이썬으로 구현을 하면서 헌형모델과 복잡한 머신러닝을 비교해볼께요!

 

신경망을 사용하는 예제에서는 붓꽃의 종을 판별하게 만들어보겠습니다. 붓꽃의 꽃받침 길이와 너비를 이용해서 붓꽃의 종류를 알아내는 예측 모델을 만들겠습니다.

 

입력 벡터, 목표 벡터, 가중치, 편향

통계모델과 머신러닝에서는 같은 뜻이지만 사용하는 용어가 다른 경우가 있습니다.

 

- 독립변수는 머신러닝용어로 입력 벡터라고 합니다.

- 종속변수는 목표 벡터라고 합니다.

- 계수는 가중치라고 합니다.

- 절편은 값이 항상 1인 독립변수로 볼 수 있으며, 편향이라고 합니다.

 

단순 퍼셉트론

단순 퍼셉트론은 아래 그림처럼 입력 벡터에 가중치(w1,w2,w3)가 반영된 값을 합해서 하나의 출력으로 나오는 것입니다. 이 출력과 목표 벡터를 비교하여 손실이 최소가 되도록 가중치를 추정합니다. 출력은 -1 또는 1처럼 정해진 2개의 값 중 하나가 되는 게 보통입니다.

         	   꽃받침  꽃받침
        편향    길이     폭      ...      xn
         |       |       |                 |
         |       |       |                 |
        w1      w2      w3      ...      wn
         \       |       |                 |
          \      |       |                 |
           \     |       |                 |
            \    |       |                 |
             \   |       |                 |
              \  |       |                 |
                ----->  Summation and Activation
                       |
                       |
                     Output

활성화 함수

활성화 함수는 입력 벡터에 가중치를 적용한 값을 출력으로 변환하는 함수입니다. 일반선형모델에서 링크함수의 역함수와 같은 기능을 하는 것이 활성화 함수라고 생각하면 됩니다. 이 경우에는 입력 벡터의 가중치가 반영된 합을 선형예측변수라고 할 수 있습니다.

 

단순 퍼셉트론의 활성화 함수로는 스텝함수를 사용합니다. 

 

계단 함수(Step function)는 입력 값에 따라 출력을 0 또는 1로 나누는 함수입니다. 이진 분류 문제에서 사용되며, 입력 값이 임계치(threshold)를 넘으면 1을 출력하고, 그렇지 않으면 0을 출력합니다. 따라서 계단 함수는 입력 값을 이진으로 분류하는 역할을 수행합니다.

계단 함수는 매우 간단하며, 수학적으로 다음과 같이 정의됩니다:

          { 0, if x < threshold
step(x) = {
          { 1, if x >= threshold


계단 함수는 비선형 함수이기 때문에 신경망과 같은 복잡한 모델에 사용할 수 있습니다. 그러나 계단 함수는 미분 가능하지 않은 함수로서, 역전파(backpropagation)와 같은 기계 학습 알고리즘에서 문제가 발생할 수 있습니다. 이는 계단 함수의 기울기가 0인 구간이 많아, 경사하강법(gradient descent)과 같은 최적화 알고리즘에서 제대로 작동하지 않을 수 있음을 의미합니다.

실제로, 계단 함수는 대부분의 상황에서 사용되지 않고, 주로 역사적인 이유로 개념을 설명할 때 사용됩니다. 대신에, 시그모이드 함수, ReLU 함수 등과 같은 다른 활성화 함수가 주로 사용됩니다. 이러한 함수들은 계단 함수의 이진 분류 능력을 가지면서도, 더 매끄럽고 연속적인 출력을 제공하여 신경망의 학습과 최적화에 더 적합합니다.

 

스텝함수를 사용하면 위에서 보여준 것 과 같은 단순 퍼셉트론을 아래식처럼 쓸 수 있습니다. 여기서 출력은 y입니다.

 

y = h(w0 + w1 X 꽃받침의 길이 + w2 x  꽃받침의 폭

 

활성화함수를 변경함으로써 단순 퍼셉트론에서 모델을 확장할 수 있습니다. 활성화함수로 사용 될 수 있는 것으로는 로지스틱 함수나 항등함수 등이 있습니다. 특히 많이 쓰이고 있는 활성화함수는 ReLU 함수(Rectified Linear Unit function)입니다. ReLU함수는 입력이 0 이하면 0을, 0이상이면 입력을 그대로 출력합니다. 

 

선형모델에서 신경망으로

퍼셉트론에서 가중치는 손실을 최소화하도록 추정됩니다. 손실은 이진분류의 경우 교차 엔트로피 오차를, 연속값에 대한 회구 문제의 경우 잔차제곱합을 사용하는 경우가 많습니다.

즉, 활성화함수로 로지스틱함수를 사용하는 것은 손실로 교차 엔트로피 오차를 사용하는 2중 퍼셉트론 로지스틱 회귀모델과 완전히 같다고 볼 수 있습니다. 또한 활성화함수로 항등함수를 사용하는 것은 손실로 잔차제곱합을 사용하는 2중 퍼셉트론 정규선형모델과 같다고 할 수 있습니다.

 

은닉층

일반선형모델의 관계를 배운 뒤에는 그걸 발전시키는 방법을 이해해야 합니다!

 

입력층 = 입력 벡터가 들어오는 부분

출력층 = 예측값이 출력되는 층

은닉층 = 입력층과 출력층 사이에 있는층 

 

은닉층을 포함함으로써 복잡한 관계를 알아낼 수 있습니다.

 

신경망

여러 층의 퍼셉트론으로 구성된 모델을 피드포워드 신경망 또는 그냥 신경망, 다층 퍼셉트론이라 부릅니다.

은닉층을 늘린 것을 심층 학습 또는 딥러닝이라 부릅니다. 

단순히 퍼셉트론을 늘리는 것뿐만 아니라 풀링층 같은 특별한 층을 포함할 수도 있는데, 그런 것을 합성곱 신경망이라 부릅니다. 신경망엔 여러 종류가 있지만, 저는 단순한 다층 퍼셉트론만 다룰 예정입니다.

 

 

신경망의 구조

 

신경망은 다음 그림처럼 다층 퍼셉트론을 이은 구조입니다. 동그라미 표시는 각각의 퍼셉트론입니다. 퍼셉트론을 향하는 화살표 개수만큼의 입력과 가중치가 있으며, 그것들을 전부 계산해서 퍼셉트론이 출력할 값을 추정합니다.

신경망은 사용하는 파라미터가 많지만 그만큼 복잡한 현상을 학습시키는 데 좋습니다. 모델이 복잡할수록 가중치를 결정하는게 어려워 집니다.

 

파라미터를 결정할 때는 확률적경사하강법(SDG)나 Adam 등을 사용합니다. 

 

출처:&nbsp;http://blog.skby.net/%EC%9D%B8%EA%B3%B5%EC%8B%A0%EA%B2%BD%EB%A7%9D-artificial-neural-network/

 

신경망의 L2 정규화

모델이 복잡해짐에 따라 과적합이 발생할 수 있습니다. 이를 방지하기 위해 L2 정규화를 종종 사용합니다. 정규화 해석은 리지 회귀와 똑같이 하면 됩니다.

 

[ 리지 회귀 - 이전글 참조]

 

[파이썬/통계] 사이킷런을 활용한 머신러닝(linear_model) - 릿지 회귀와 라소회귀 최적의 정규화 강

이전 포스팅과 연결되는 부분이 많아서 이전 포스팅을 태그 걸었습니다. 이번 포스팅에서는 머신러닝 실전을 해보겠습니다. [파이썬/통계] 통계학과 머신러닝 - 이론적인 부분들 (라소회귀, 리

jofresh.tistory.com

 

딥러닝의 경우 가중치의 결정 방법, 중간층의 개수, 중간층의 종류, 손실함수의 종류, 활성화함수의 선택, L2 정규화의 강도 등 많은 요소를 바꿔봐야 합니다. 이러한 것들은 모델을 추정하기 전에 정해져야 하기 때문에 하이퍼파라미터라 구별해서 부릅니다. 어떤 구조 또는 하이퍼파라미터가 가장 좋을지 알아보려면 나름대로의 노력이 필요합니다. 리지 회귀와 교차검증을 동시에 이용해서 예측 정확도를 높이는 방법 등이 있습니다.

 

 

다음 포스팅에서는 실제로 파이썬을 이용하여 신경망을 만들어보겠습니다. 

 

그럼 다음 포스팅으로 만나요 !

 

 

 

 

728x90
반응형