[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

다층 퍼셉트론 - 기본구조 이론

inu 2020. 8. 2. 15:29
반응형

다층 퍼셉트론 신경망 구조

  • 다층 퍼셉트론은 복수의 퍼셉트론 계층을 순서를 두고 배치해 입력벡터로부터 은닉 계층을 거쳐 출력벡터를 얻어내는 신경망 구조이다.
  • 은닉 계층이 생성하는 벡터를 은닉 벡터라고 한다.
  • 각각의 계층은 단층 퍼셉트론과 같은 구조를 가진다.
  • 하나의 계층에 속해있는 퍼셉트론은 서로 영향을 주고 받을 수 없다. 인접한 앞 계층의 출력이 뒷 계층의 입력으로 제공될 뿐이다. (완전 연결 방식)
  • 단층 퍼셉트론 대비 기억용량 및 계산능력 부담이 크지만, 성능 향상을 기대할 수 있다.

은닉 계층 수와 폭

  • 다층 퍼셉트론 최종 계층은 원래 데이터의 특징에 맞게 알맞은 형태의 출력 벡터를 생성하는 역할을 한다. (출력 계층)
  • 반면 다른 은닉 계층은 이러한 제약이 없다. 신경망 설계자가 자유롭게 정할 수 있다.
  • 은닉 계층의 폭은 해당 계층의 퍼셉트론 수(=은닉 벡터 크기)이다. 퍼셉트론은 노드라고도 부른다.
  • 입력 m개에 연결된 퍼셉트론 n개를 갖는 한 계층의 파라미터 수는 m*n개의 가중치 파라미터에 n개의 가중치 파라미터를 가져 총 m*n+n의 파라미터를 가진다.
  • 은닉 계층은 무조건 많다고 좋은 것이 아니다. 은닉 계층이 늘어나면 학습에 그만큼 더 많은 데이터가 필요하다. 따라서 충분한 양질의 데이터가 준비되지 않으면 은닉 계층 확장이 신경망의 품질을 떨어뜨릴 수 있다.

비선형 활성화 함수

  • 선형 연산 결과 뒤에 적용되어 퍼셉트론의 출력을 변형시키는 장치는 '활성화 함수'라고 한다. 이는 보통 비선형 함수의 형태이다.
  • 앞서 살펴본 '시그모이드'나 '소프트맥스'도 비선형 함수의 일종이다. 하지만 이는 출력 유형에 따라 이용하는 방법이 달라지기 때문에 퍼셉트론 내부에 활용하긴 어렵다.(후처리과정으로만 비선형함수를 이용했다.) 대표적으로 소프트맥스는 출력 여러개를 묶어 함께 처리해야 하기 때문에 독립된 구조인 개별 퍼셉트론에는 이를 넣을 수 없다.
  • 그 외에도 출력 벡터 하나에 각기 다른 역할을 하는 여러 정보를 한번에 생성해야하는 경우도 있다. (이는 추후 다룸)
  • 이러한 이유로 출력벡터에 비선형 활성화함수가 사용되지 않는다. 단층 퍼셉트론에서도 후처리 과정에 이용했을 뿐 직접적으로 계층에 해당 함수를 놓지 않았다.
  • 하지만 은닉 계층은 이러한 제약이 없어 비선형 활성화함수를 활용할 수 있다.
  • 수학적 원리상 선형 처리는 아무리 여러단계를 반복해도 하나의 선형처리로 줄여 표현할 수 있다. 즉, '다층'이 큰 의미가 없다.
  • 하지만 비선형 활성화함수가 있다면 이러한 한계를 극복할 수 있다. 따라서 다층 퍼셉트론에서 비선형 활성화함수의 활용은 필수적이다.
  • 참고로 많은 노드 수보단 다층의 구조가 신경망 성능에 더 좋은 영향을 미친다고 한다. 이는 입력 데이터로 부터 얻은 정보를 추상화하는데 다층 구조가 효과적이기 때문으로 판단된다.

ReLU 함수

  • 음수입력을 걸러내 0으로 만드는 간단한 기능의 함수이다.
  • 은닉 계층의 비선형 활성화함수로 가장 널리 이용된다.
  • ReLU 함수는 수학적으로 x가 0보다 클 때는 y = x, 0보다 작거나 같은 때는 0으로 처리한다.
  • 시그모이드나 소프트맥스도 좋은 비선형 함수이지만 지수 연산이 포함된 복잡한 계산과정이 있어 처리 부담이 크다. 심지어 소프트맥스는 벡터 원소를 하나로 묶어 처리하기 때문에 은닉 계층에 사용하기 부적절하다. (따라서 시그모이드나 소프트맥스는 주로 이진 분류나 선택 분류의 후처리과정에서 활용된다.)
  • x=0에서 미분이 불가능한 것이 ReLU 함수의 유일한 흠인데, 임의로 미분값을 설정해주는 방법으로 해결한다. (보통 0으로 설정)
  • ReLU의 미분값은 y값으로 간단하게 계산이 가능하다. y가 양수이면 1, 그렇지 않으면 0이라고 계산한다. (ReLU의 출력은 음수일수 없기 때문에 y가 음수인 경우는 제외할 수 있어서 가능한 것이다.)
  • 파이썬에서는 np.sign() 함수를 사용해 이를 판단하고 간단하게 ReLU의 미분값을 구할 수 있다.

민스키의 XOR문제와 비선형함수

반응형