개발자 끄적끄적
Neural Networks 본문
<개요>
- 인공신경망(artificial neural networks)으로도 불리는 신경망(neural networks)모형은 분류와 예측을 위해 사용되는 모형이다
- 신경망은 노의 뉴련들이 상호작용하고 경험을 통해 배우는 생물학적 활동을 모형화 한 것이다
- 신경망은 인간 전문가가 배우는 방식을 흉내 낸다
신경망의 학습 및 기억 특성들은 인간의 학습과 기억의 특성을 닮앗고 특정사건으로부터 일반화하는 능력도 또한 갖고 잇다
- 일반적으로 신경망의 가장 큰 장점은 높은 예측 성과에 있다
신경망의 구조는 다른 분류모형에서는 불가능한 입력변수와 출력변수 사이의 매우 복잡한 관계를 파악한다
<기본 아이디어>
- 입력정보를 복잡하고 변경이 용이한(flexible)신경망 "모델"과 결합
- 신경망 모델의 "계수"는 반복 과정(iterative process)을 통해서 지속적으로 조정된다
- 분류와 예측에서 신경망 모델의 중간 성능은 반복 과정을 지속적으로 조정된다
<망 구조>
- 다층 신경망(Multiple Laypers Perceptron)
- 입력층(input layer : raw observations)
- 중간층(Hidden layers)
- 출력층(Output layer)
- 노드
- 연결강도 : Weights(반복적으로 조정된다)
- 편기 값 : Bias values(계수와 같이 반복적으로 조정된다)
<노드의 출력 계산>
- 신경망의 세 가지 유형(입력, 은닉, 출력)의 층으로 구성
- 각 층의 주요 차이점은 노드의 입력에서 출력까지 연결되는 함수에 의해 결정된다
- 입력노드는 예측변수의 값을 입력하는 역할
- 입력노드의 출력은 입력 값과 같다
- p개의 예측변수가 있으면, 입력층은 p개의 노드를 갖는다
- 은닉층 : 입력층의 출력값을 다음 은닉층의 입력 값으로 사용
- 은닉층의 출력
- 입력변수 값의 가중 합을 계산하고 이 값을 전이함수(transfer function)에 적용
- 입력값 벡터 x1, x2, …, xp에 대해서 가중합계를 이용하여 은닉층 노드 j의 출력값을 계산
- 가중합 : 가중합 〖 𝑠〗_𝑗= 𝜃_𝑗+∑_(𝑖=1)^𝑝▒〖𝑤_(𝑖,𝑗) 𝑥_𝑖 〗
- 여기서 𝜃_𝑗, 𝑤_(1,𝑗), 𝑤_(2,𝑗), ⋯, 𝑤_(𝑝,𝑗)는 초기 시점에 무작위로 할당된 가중치로서 네트워크가 “학습”을 하면서 이를 조정
- 은닉층 노드 j의 편의 값(bias value)으로 불리는 𝜃_𝑗 는 노드 j의 공헌 수준을 통제하는 상수의 역할을 한다.
- 노드 출력 계산의 다음 단계에서는 이 합계 값에 g(활성화 함수)함수를 취한다. 이 함수의 예는 다음과 같다
- 계단함수[g(s)=1, if s>0]
- 선형함수 [g(s)=bs],
- 지수함수 [g(s)=exp(bs)],
- 로지스틱/시그모이드(sigmoidal) 함수 [g(s)=1/(1 + e-s)]
- 탄젠트 하이퍼블릭 :
- 렐루 함수(ReLU) : f(x)=max(0,x)
- 리키 렐루(Leaky ReLU): f(x)=max(ax, x), a는 작은 값 주로 0.01
- 소프트맥스 함수(Softamx function) //훈련할 때 쓰이는 함수(확률값을 만들어야 하므로)
- 로지스틱/시그모이드 함수는 신경망에서 가장 많이 사용되는 함수
- 매우 작거나 큰 값이 갖는 극단치 효과를 완화시키는 동시에 함수의 값을 0.1과 0.9사이에서 선형성을 유지시킨다
- g(활성화 함수) 전이함수(transfer function)로도 불리는 g함수는 단조증가함수이다
<입력층>
- 입력층에서, 입력=출력
- 입력층의 출력 = 중간층으로 입력
<중간층>
- 각 노드는 전체 입력 노드의 출력을 입력한다
- 각 중간층의 출력은 입력 가중치의 합의 함수
<연결강도(Weights)>
- 편기와 연결강도 𝜃_𝑗와 𝑤_(𝑖,𝑗)는 전형적으로 -0.05에서 +0.05 범위의 랜덤 값으로 초기화된다
- 예측변수가 없는 모형과 마찬가지로 신경망의 사전지식이 반영되지 않는다
- 이러한 초기 연결강도는 학습의 첫 반복 과정에서 사용한다
<출력층>
- 마지막 중간층의 출력이 출력층의 입력이 된다
- 전이함수 g를 로지스틱함수로 사용
- 일반적으로 출력층에서는 소프트맥스 함수 사용
<전처리 단계>
- 0~1로 변수 조정 : 수작업으로 변경
- 𝑎≤𝑥≤𝑏⇒ 𝑥_𝑛𝑜𝑟𝑚=(𝑥−𝑎)/(𝑏−𝑎)
- 명목상 범주형 변수
- m개의 범주 -> m-1개의 가변수(dummy variables)
- 만약 등거리 범주(ex, A,B,C,D...)라면, 0~1범위에서 같은 간격의 점수로 도표화
- ex) 4개의 순서형 범주가 균등한 거리에 있다면 [0, 0.25, 0.5, 1]로 사상
- 비대칭 변수인 경우는 로그변환 등을 하여 대칭으로 만든다
<모델 학습>
- 목표 : 최고의 예측값을 산출할 연결강도를 찾는 것
- 위에서 설명한 과정이 모든 레코드에 반복된다
- 각 레코드에서 예측을 실제값과 비교(훈련데이터)
- 차이는 출력 노드의 오류(손실함수로 표현된다)
- 오류는 역전파되어 모든 중간 노드들로 분배되고 오류를 최소화 하도록 연결강도를 업데이터하는데 사용된다
<손실 함수(Loss function)>
- 학습이 잘 (안)되었는지를 평가하는 함수, 주로 예측기에 많이 쓰인다
- 평균제곱오차(mean squared error, MSE)
- 𝑬=𝟏/𝟐 ∑_(𝒌=𝟏)^𝑲▒(𝒚_𝒌−𝒚 ̂_𝒌 )^𝟐
- 교차 엔트로피 오차(cross entropy error, CEE), True 노드가 발생할 확률
- 𝑬=−∑_(𝒌=𝟏)^𝑲▒〖𝒚_𝒌 𝒍𝒐𝒈(𝒚 ̂_𝒌)〗
- 데이터 한 개에 대한 손실함수를 계산: 여기서만 𝒚_𝒌 실제값, 𝒚 ̂_𝒌 예측값(출력값)
- K는 출력층 노드 수(출력노드에 대한 총합)
- log()는 밑이 e인 자연로그
- 교차엔트로피에서 𝒚𝒌는 정답에 해당하는 인덱스의 원소만 1이고 나머지는 0
<왜 손실함수를 설정하는가?>
- 학습 데이터에 대한 최적의 매개변수를 찾는 것 -> 학습
- 손실 함수의 값이 작게 되도록 매개변수를 반복적으로 수정
- 손실 함수에 대한 매개변수 미분(기울기)을 계산하고 미분값을 참고해서 매개변수 값을 갱신
- 손실 함수에 대한 매개 변수의 미분
- 가중치 매개변수를 아주 조금 변화시켰을 때 손실 함수가 어떻게 되는가
- 미분 값이 음수이면 -> 매개변수를 양의 방향으로 -> 손실 함수의 값을 줄인다
- 미분 값이 양수이면 -> 매개변수를 음의 방향으로 -> 손실 함수의 값을 줄인다
- 매개변수값의 갱신은 미분값(기울기)의 반대 방향으로 움직인다
- 𝑾^(𝒊+𝟏)=𝑾^𝒊−𝒍∗├ 𝝏𝑬/𝝏𝑾]_(𝒘=𝑾^𝒊 )
<오차의 역전파법(Back Propagation)>
- forward propagation and notation
- 손실(비용)함수 (Loss=Error=Jtotal) : 출력층이 2개인 경우
- 𝐽_𝑡𝑜𝑡𝑎𝑙=𝐽_1+𝐽_2=∑2_(𝑘=1)^2▒〖1/2(𝑎_𝑘^((3) )−𝑦_𝑘)〗^2
- 여기서 𝑦_𝑘는 출력층 k에서의 target 값
- 역전파를 이용한 가중치 갱신
- 𝑤_(𝑗,𝑖)^((𝑘+1))=𝑤_(𝑗,𝑖)^((𝑘))−𝜂 (𝜕𝐽_𝑡𝑜𝑡𝑎𝑙)/(𝜕𝑤_(𝑗,𝑖)^((𝑘)) )
- 여기서 𝜂는 학습률
- 오류는 연결강도를 업데이트하는 데 사용된다
- 𝑙 = 0과 1 사이의 상수, “학습률(learning rate)” 또는 “감쇄(weight decay) 매개변수”를 나타낸다
<갱신(Updating)>
- 개별 갱신(Case Updating)>
- 연결강도는 각 레코드가 망을 통해 운영된 후 갱신된다
- 신경망을 통해 모든 레코드가 갱신되는 것을 one epoch(한 세대, 또는 반복)이라고 한다
- 한 세대가 완료되면, 첫 레코드로 돌아가 연결강도 갱신 과정을 반복한다
- 일괄 갱신(Batch Updating)
- 학습 세트의 모든 레코드가 갱신이 일어나기 전에 신경망에 입력된다
- 이러한 경우에, 갱신이 사용된 오류는 모든 레코드의 모든 오류의 합이다
<Why It Works>
- 커다란 오류는 연결강도에 커다란 변화를 가져온다
- 작은 오류는 상대적으로 연결강도를 변하지 않게 내버려둔다
- 수천 번의 갱신을 통해, 주어진 연결강도는 그 연결강도와 연관된 오류가 무시해도 될 정도가 될 때까지 계속 변화한다
그리고 이 지점에서는 거의 변화하지 않는다
<갱신을 멈추는 일반적인 조건들>
- 연결강도가 한 반복과 다음 반복 사이에 거의 변화하지 않을 때
- 오분류율이 요구된 목표치에 도달했을 때
- 실행횟수의 한계에 도달했을 때
<과적합 피하기>
- 반복을 많이 하면, 신경망은 쉽사리 데이터를 과적합할 수 있다
- 과적합을 피하기 위해
- 검증 데이터에서 오류 추적
- 학습의 반복 횟수 제한
- 망의 복잡성 제한
<요구되는 사용자 입력>
- 망 구조 결정
- 은닉층의 개수
- 가장 일반적인 경우 : 하나의 은닉층
- 은닉층에서 노드의 개수
- 노드가 많을수록 복잡성을 잡아내가 쉽지만, 과적합의 가능성도 높아진다
- 일반적으로 예측변수의 개수로 출발하여 과적합 여부를 점검하면서 점진적으로 조정(축소 혹은 증가)
- 출력 노드의 개수
- 분류에서, 클라스마다 하나의 노드
- 수치형 예측에서 하나를 사용
<망 구조>
- "학습률" : learning rate
- 낮은 값은 각 반복에서의 오류로부터 새로운 정보의 "반영도를 줄인다"
- 이는 학습을 늦추지만, 국부구조에서 과적합 경향을 축소시킨다
- 큰 값으로 시작해서 반복이 진행됨에 따라 점차 감소
- "관성(momentum)"
- 높은 값은 이전 반복에서와 같은 방향으로 연결강도를 게속 변화시킨다
- 이 또한 국부구조에서 과적합을 피하도록 돕지만, 또한 학습을 저하시킨다
<장점>
- 예측 능력이 좋다
- 복잡성 관계를 잡아낼 수 있다
- 모델을 명시할 필요가 없다
<단점>
- "블랙박스" 예측 기계로 간주되는데, 예측변수와 결과 사이의 관계에 대한 직관을 제공하지 못한다
- 변수선택 메커니즘이 없다. 따라서 변수를 선택하는 데 조심해야 한다
- 만약 변수가 많다면 높은 계산능력이 요구된다(부가 변수는 계산해야 할 연결강도의 수를 극적으로 증가시킨다)
<요약>
- 신경망은 분류와 예측에 사용될 수 있다
- 결과와 일련의 예측변수들 사이의 매우 유연하고 복잡한 관계를 잡아낼 수 있다
- 망은 더 많은 데이터가 입력될 때 모델을 반복적으로 "학습"하고 갱신한다
- 주요 위험 : 과적합
- 대용량 데이터가 필요하다
- 예측성능이 좋지만, 본질상 "블랙박스"
<딥러능>
- 음성 인식과 영상 인식에서는 화속밧, 파동 진폭과 같은 저수준의 세분화된 예측자가 많은데, 이 저수준에서는 정보가 없다
- 고수준 화소 패턴을 모두 정의하려면 많은 추가 작업 필요
- 딥러닝의 핵심은 고수준 특징을 어떻게 식별할지 스스로 학습하는 기능(고수준의 특징 예 : 영상에서 얼굴, 혹은 얼굴 영상에서 눈(eye), 등)
<CNN(컨볼루션 신경망)>
- 널리 사용되는 딥러닝 구현
- 예측 변수들의 일부 변수를 선택하고 그 일부에 동일한 연산 적용
- 일반적인 컨볼루션에서 일고리즘은 3x3 화소처럼 한 번에 작은 영역을 고려
<지역 특징 지도>
- '수직선 탐지기' 필터는 원본 영상 행렬을 가로와 세로로 움직이면서 매번 하나의 출력값을 계산해서 생성하여 결국 좀 더 작은 행렬로 귀결
- 원본 영상 값들이 단순히 개별 화소 값들이라면 더 작은 새로운 행렬은 특징들의 지도가 되어 " 이 영역에 수직선이 있는가?"라는 물음에 답한다
- 컨볼류션을 위한 프레임이 상대적으로 작다는 사실은 전체 연산이 지역적인 특성을 갖는 특징들을 식별할 수 있음을 의미
- 지역 특징 지도들을 입력으로 취하는 또 다른 컨볼류션 연산의 층들은 연이어 좀 더 높은 수준의 특징들(모서리, 사각형, 원형 등)을 구축 가능
'데이터 마이닝' 카테고리의 다른 글
K-NN 알고리즘 (1) | 2023.05.19 |
---|---|
다중선형 회귀분석 (1) | 2023.05.10 |
SNA(Social Network Analysis) (1) | 2023.05.06 |