머신러닝 스터디/딥러닝

인공신경망 (Artificial Neural Network, ANN)_(2)

hozy연 2022. 10. 1. 02:34

# 신경망에서 노드 갯수, 훈련 데이터 크기

1) 적절한 은닉층 갯수는? 

    답은 없음.! 사용자가 임의로 정해줘야함. 요즘은 최적의 노드수를 정해주는 알고리즘이 존재

 

2) 훈련 데이터 세트의 크기?

     A = H(hidden layer)*(input node 갯수+1)+H+1개의 가중치가 존재

     따라서, 여기에 100을 곱한 A*100개의 데이터셋이 필요함.

     **너무 적은 숫자로 인공신경망 구조를 학습하는 것은 나쁨 (의사결정나무의 경우 훈련데이터의 크기는 상관이 없음)

 

# 중요 파라미터

1) 모멘텀: 방향성

2) 학습률: 새로운 정보 학습 비율

 

# 특성 (Feature)

- 특성의 수(노드 수)가 많을 경우 신경망에 영향을 미친다

   1) 과적합의 위험이 커짐 (훈련데이터의 크기도 커져야 함)

   2) 시간이 많이 걸리며 weight들이 최적화될 가능성이 낮아짐

 

- 유의미한 최소한의 변수만을 훈련 데이터로 사용하는 것이 좋음

   1) 변수와의 상관관계

   2) 의사결정 나무

   3) 직관의 사용

 

- feature engineering

  예1> 우편번호 --> 지역의 평균 수입, 평균 집값, 인구 통계학 필드 추가

  예2> 날짜 --> 주말 vs. 평일, 공휴일 vs. 평일 등으로 바꾸기 가능

  예3> 주소 텍스트 필드 --> 중요한 정보를 추출하여 숫자로 표현. 수도권 vs. 비수도권 등으로 바꾸기 가능 

 

# 입력값 (Input)

1) 최댓값, 최솟값 사이의 연속값

   2*[(X-Min)/{(Max-Min)+1}] -1

   (여기서 분모에 +1하는 이유: -1~+1사이에 값이 위치할 수 있도록 분모를 키우기 위함)

 

2) Skewed distribution (한쪽으로 치우친 분포)

     - log 치환: 큰값을 줄여 분포를 비슷하게 맞춘다

     - 구간화(bining)진행: 희소한 분포를 갖는 구간의 경우 크기 크게 나누구 밀집 정도가 높은 구간은 작게 나눈다

     - 정규화

 

3) 숫자형/범주형 코딩 방법

     - 숫자형(Ordinal):

        1. -1~+1 or 0~1로 매핑 가능

        Ex. 자녀수 0~4 --> 0(Min), 0.25, 0.5, 0.75, 1(Max) / Min, Max를 고정시키고 균등하게 구간화 매핑

 

       2. 온도계 코딩 

       Ex. 성적 A, B, C, D 일때, 간격은 A,B 보다 C,D가 간격이 큼

             이렇게 간격이 일정하지 X 코딩을 Themometer 코딩이라고 함. 즉, 등급간의 간격이 균등하지 않은 정보가 있을 때 유용함.

 

     - 범주형(Nominal):

        Ex. 결혼, 미혼, 이혼, 독신, 사별, 미상

              이러한 값들은 OX 문제임. 숫자로 표현하는 것은 적합하지 않음

              범주들을 플래그(Flag)들로 한 값당 하나씩 나눠줘야함

 

 

- 보통 N-1 중 하나 코딩으로 사용함

 

 

 

 

# 결과값 (Output)의 해석

1) 연속형 값의 추정

    - 역변환 진행 (원래값이 무엇이었는지 추정이 가능함)

 

2) Binary, 범주형 값의 추정

     - 결과 값이 숫자형으로 나오기 때문에 cut off value를 정해서 특정값 이하이면 Fasle, 이상이면 True 분류 가능

     - 신경망 출력에 대한 범주화 신뢰수준 계산이 가능

     - 특히 배타적인 범주가 아닐 경우 더 유용함

        Ex. 고객의 상품군 선호도 예측 모델: 음악 좋아하는지 가전제품을 좋아하는지

 

* 결과값을 보기 전에 validation set을 돌려보고 결과를 확인한 후 잘 분리 되지 않은 가운데 부분을 어떻게 분리하면 좋을지 생각해보고 ANN을 사용하는 것이 좋음 

 

# ANN의 단점

 1) 입력 노드의 크기가 커지면 과적합 문제 발생 --> variable selection issue

2) backpropagation으로 구한 weight값ㅇ르 최적의 값이라고 보증할 수 없음

3) 어떤 결과가 도출된 이유를 정확히 설명하기 어려움. 불투명

4) 결정 내리는 과정을 규칙의 형태로 표현하지 X

 

결과에 대한 입력값들의 상대적인 중요성을 보기 위해 민감도 분석을 시행할 수 있음


* 민감도 분석 수행단계 (weight값을 모두 구한 ANN이 있다고 가정)

 

1) 각 입력에 대한 평균을 구함

2) 모든 입력들이 평균값일때의 신경망의 출력을 측정

3) 다른 값들은 평균을 유지한 상태에서 특정 입력을 최소, 최대로 넣어본다 그리고 측정 --> 변화를 측정할 수 있음

     이를 통해 해당 Input변수가 output에 영향을 미치는지 알 수 있음


# 시계열 데이터에서 ANN

- 보통 ANN은 시계열에 적합하지 X

- 하지만 같은 feature값을 T1, T2, T3로 시간별로 나눠서 노드(feature)를 만들어서 넣어보는 방법이 존재함

 

# Logistic 회귀분석 :ANN은 아님..!

- 목표변수가 수치형일때 보통 선형회귀분석이 가능 하지만 범주형일때는 불가능함 (결과값이 0,1로 나오지는 않기 때문)

- logistic 회귀분석은 통계적으로 유의한지 알 수 있음 (ANN과 의사결정나무는 통계적으로 유의한지 알 수 없음)

 

odds ratio= p/(1-p) (일어날 확률이 일어나지 않을 확률에 비해 몇배가 되는지)

logit(p)= log(p/(1-p)) 

logistic 함수는 logit을 회귀식에 적용한 것

- 도출되는 내용을 이해하지 못함...좀더 공부가 필요...나중에 추가하기

 

# 대표적인 딥러닝 알고리즘

- CNN: 보통 이미지 1) convolutional layer 2) pooling layer 3) fully connected layer 4) loss layer (공간적 정보 활용가능)

- RNN: 순차적, 언어, 텍스트 형성에서 주로 쓰임. LSTM 대표적

- 강화학습: 알파고 생각하기. 시행착오로 스스로 학습. 보상/체벌

- GAN: 1) 생성자 2) 식별자 - 진짜같은 가짜 만들기

-dropout: random하게 20, 30% 삭제하고 학습. 특정 노드에 의존하지 않음 강건한 ANN을 만들기 위해 활용됨