소품집

[ML/DL] Artificial Neural Network (인공신경망) 본문

AI

[ML/DL] Artificial Neural Network (인공신경망)

sodayeong 2020. 5. 11. 13:44

Neural Network


  • Motivated by studies of the brain (사람의 뇌를 학습한 모습!)
  • A network of "artificial neurons" that learns a function
  • Doesn't have clear decision rules like decision trees, but highly successful in many different application (e.g. face detection) → D.T와 같은 완전한 결정(classification)은 하지 못하지만, 여러 응용 분야에서 높은 성공률을 보여줌

 

Artificial Neural Networks


ANN의 특징

  • 한 쪽 방향으로 흐름 (feed forward)
  • 보통 1개 이상의 hidden layer(은닉층)을 가짐
    • 결국 input, hidden, output layer 등의 여러층을 가짐 → Multi layer
  • 각 층 사이에는 기본적으로 다 연결되어 있음 (fully connected)
    • 그러나, 같은 층 사이에는 연결이 없음 (bi-partite graph)

위 특징 때문에, multi layer perceptron (MLP)라고도 부른다!

 

고차원의 패턴을 인지할 수 있는 XOR과 같은 비선형 문제를 풀 수 있게 된다.

선형으로 분류가 안되는 케이스는 단층이 아닌 다층 신경망을 적용하여 해결이 가능해짐.

 

이론적으로 hidden layer의 개수가 많을수록 Deep한 neural network가 생성되어 성능이 높아지는 반면

hidden layer가 너무 많으면 의사결정을 하지 못하게 됨

 

 

 

Linearly separable case

Linearly non-separable case(선형 비분리형 케이스)에 대한 해법→ 단층 퍼셉트론으로는 풀 수 없다!

  • Combination (Multi-layer)
  • 즉, hidden layer들을 여러개 쌓아서 상위 패턴의 인지가 가능토록 한다

하지만, 그냥 Multi-layer이기만 하면 될까요?

힌트속에서 얻을 수 있는 정보는 벡터와 벡터의 덧셈은 차원을 변형하는 데 영향을 주지않기 때문에 활성함수를 바꿔주어야 합니다. 선형합을 한 뒤 비선형 패턴도 풀어낼 수 있는 비선형함수를 활성화함수로서 사용해주어 해결합다.

 

그 중에서도 우리는 최적화가 목표기 때문에 미분 가능한 함수여야 해요!

다양한 function중에서도 대중적으로 많이 쓰이는 활성함수는 sigmoid function입니다.

 

 

 

ANN


Combination of Linear functions → Linear function

  • 다시 말해서, 여러 층을 가진 ANN이라 하더라도, 각 층에서 선형 패턴밖에 인지할 수 없다면, 이론적으로는 그 ANN이 인지하는 패턴은 선형이라는 뜻(=의미가 없어지게 됨)!
    • f(x)=ax일 때, 3개의 층에서는 f(f(f(x))) 인지 가능
    • → 즉, a^3x
    • 어떤 임의의 g(x)=bx의 b=a^3 인 경우가 존재 할 수 있음
  • 따라서, 각 층에서 '비선형 패턴'을 인지할 수 있도록 해야한다.
    • → 비선형(이차함수)함수를 쓰면 되겠지?
    • → f(x)=ax가 아니라, f(x)=ax^2과 같이 비선형 함수를 쓰면 됨!

 

 

 

ANN: Activation Function


ANN의 Hidden layer에서 각 '노드'의 역할

  • 임의의 패턴 인지
  • 결국엔 입력 → 출력

ANN의 입출력

  • 입력: 노드와 연결된 이전 층 노드들의 출력값들
  • 출력: 입력값들의 weight sum과 bias에 대하여, 임의의 '함수'(동작)을 실행한 결과
  • → 여기서의 '함수'를 가리켜 'Activation function(활성함수)'라 함

 

Bias는 모델 구현과 설명 편의 상 생략하기도 함

즉, ANN의 Hidden layer의 각 노드의 활성함수에 '비선형 함수'를 채택 함으로써 Multi layer인 ANN이 궁극적으로 '비선형 패턴'을 잡아낼 수 있도록 함

  • 비선형 activation function은 모델 학습을 위해 미분 가능(differentiable)해야 함 → 최적화!
  • ex) Gating function → Sigmoid 가 많이 쓰이는 중

 

  • Hidden layer에서는 비선형 패턴을 인지를 위해 sigmoid 함수 등을 주로 이용하는데. 그렇다면 맨 마지막에 있는 output layer에서는 어떤 함수가 주로 쓰일까?

 

 

위의 많은 예시를 봐왔듯이 비선형 문제를 해결하기 위해서 비선형 함수 sigmoid를 적용했었고,

마지막 output은 답(class or label)을 맞추는 classification 작업이 이루어지기 때문에 softmax function이 사용되어 각 노드(출력층 노드는 각 클래스)에 대한 확률값을 주게됩니다.

 

  • 많은 경우 Output layer에서는 softmax function이 사용되지만, 구조상 지수함수이므로 컴퓨터 계산 도중 값이 '무한대'가 되어버리는 오버플로가 발생할 수 있음 → 개선식을 사용해보자

개선식

def softmax(x): 
			x = x-np.max(x)
			return np.exp(x)/np.sum(np.exp(x))
  • 각 ak에서 최대값을 빼주게 되면 결과적으로 모두 '음수'가 됨→ 오버플로 방지!
  • → 즉, exp(음수)가 되므로 0~1 사이의 값들을 누적하게 ****됨
  • 그러나, 특정 ax이 다른 값들보다 월등히 크면, 해당 exp(ax)만 뺴고 나머지는 0에 가까워지게 됨 → a1:k를 먼저 '정규화'하여 모두 0~1 사이로 만든 후 사용하면 좋다

 

[참고] Softmax와 '다항 로지스틱 회귀'는 절친이다~!

 

weight는 feature의 셀렉을 위해 중요한 요소입니다. hidden layer에서 노드의 역할을 설명할 수 없지만, ANN 학습을 거쳐가며 hidden layer에 가장 적절한 weight을 찾아줍니다. → feature 자동 학습

Bias 노드 자체에 prior(사전확률)을 주기 위해 사용됩니다. → Bias도 weight처럼 같이 갱신된다!

 

 

ANN: Weight Matrix and Bias


우리가 ANN을 쓰는 이유를 다시 상기시켜 봅시다.

  • 패턴 인지
  • 이를 위해 패턴 학습이 필요하겠네?
  • 근데, '학습'의 실체가 뭘까! 뭐가 학습이 되는거지?

이전 label을 조합하여 만들 layer은 전 layer 보다 상위 개념을 잡고 있다!

  • 학습이 되는 것은, 각 층 사이를 잇는 weight matrix
  • ex) L1과 L2 사이의 Matrix 크기는 3 by 3
  • 각 층의 bias
  • ex) L2 층의 bias 크기는 3
  • Weight Matrix 의미/역할해당 '노드 쌍'이 함께 등장(co-occurrence)한 빈도수 (두 노드가 관측 가능한 경우)
  • 두 개 층의 각 '노드 쌍' 사이의 관계 중요도
  • Bias 의미/역할해당 노드 빈도수에 기반함 (해당 노드가 관측 가능한 경우)
  • 각 노드 자체의 중요도

  • 관측 가능한 값은 input, output layer에만 존재하므로, 먼 거리(?)에 놓인 이 두개의 Layer 사이의 Co-occurrence를 기반으로 Weight Matrix, Bias들을 학습할 방법이 필요합니다.

하지만 좋은 성능을 내는 ANN에도 단점이 있는데요. 바로 output의 결과를 설명하지 못한다는 점 입니다. 예시를 들어보자면 알파고는 한 수를 둘 때 마다의 우리는 그 과정을 모르는 것 처럼요. 은닉층에 둘러쌓인 딥러닝의 한계입니다.

 

 

 

ANN 학습


hidden layer가 deep할 수록 성능이 높아진다는 연구결과가 널리 알려져있지만 layer가 쌓일수록 편미분은 어려워집니다. 그래서 feed-forward를 역으로 수행해 보는 역전파 알고리즘을 수행하게 됩니다.

 

 

 


 

다음 포스팅으로는 이 문제를 역으로 수행하는 

역전파 알고리즘도 올리겠습니다~~!

728x90
Comments