이 글의 핵심
- 신경망은 여러 층으로 이루어져 신호를 전달하며 가중치를 자동으로 학습하는 구조다
- 활성화 함수는 입력 신호의 총합을 출력으로 변환하는 함수로, 계단 함수, 시그모이드 함수, ReLU 등이 사용된다
- 신경망의 깊이를 유의미하게 만들기 위해 반드시 비선형 활성화 함수를 사용해야 한다
- 3층 신경망과 같이 층이 깊어질수록 이전 층의 출력값이 다음 층의 입력값이 되는 과정을 반복하며, 이는 행렬의 곱을 통해 효율적으로 계산된다
- 회귀 문제에는 항등 함수를, 분류 문제에는 확률로 해석 가능한 소프트맥스 함수를 주로 사용한다
- 소프트맥스 함수 적용 시 지수 연산으로 인한 오버플로우를 방지하기 위해 입력값 중 최댓값을 빼주는 기법이 활용된다
1. 신경망이란
신경망이란 여러 층들이 이어져 신호를 전달하는 구조로 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습한다.
다음은 신경망 예시와 여기서 정의하는 내용이다.
- Python 배열의 인덱스를 고려하여 입력층이 0층이다
- 가중치를 갖는 층을 기준으로
n층 신경망으로 표기한다 - 즉, 아래 입력층-은닉층-출력층은 실제 3개의 층이지만, 가중치를 갖는 층은 입력층과 은닉층 2개이므로
2층 신경망이다
신경망 예시
2. 활성화 함수
2.1 개념
활성화 함수 는 입력 신호의 총합을 출력 신호로 변환하는 함수이다.
신경망은 앞서 다룬 퍼셉트론과 특별히 다른 것이 없다. 신경망의 신호 전달 방법을 이해하기 위해서 활성화 함수를 다시 기억해야 한다.
활성화 함수는 입력 신호()와 편향()의 총합을 라고 하고, 이 값을 활성화 함수 의 입력값으로 넣어 최종적으로 를 출력하는 흐름이다.
여기서 이전에 퍼셉트론을 다루었을 때는 입력 신호들()만 보였는데 편향()이 추가되었다.
편향이 추가 고려된 이유
입력 신호에 가중치들의 합에서 기존 편향을 더했을 때, 편향을 또 하나의 가중치로 인식하고 편향에 대한 입력 신호를 1로 해석하면 된다. 이를 통해 하나의 수식으로 정리할 수 있다.
따라서, 실제 하나의 입력 노드들의 값을 받는 출력 노드의 내부는 그림과 같이 활성화 처리 과정이 포함되어 있다.
편향이 추가된 입력신호
2.2 활성화 함수의 종류
계단 함수
계단 함수(step function)는 임곗값을 경계로 출력이 바뀌는 함수다.
이전에 다룬 퍼셉트론은 활성화 함수로 계단 함수를 이용한다. 계단 함수는 아래와 같은 수식으로 정리할 수 있다.
시그모이드 함수
시그모이드 함수(sigmoid function)는 입력에 따라 출력이 연속적으로 변화하는 함수다.
신경망에서는 계단 함수 대신 자주 이용하는 활성화 함수는 시그모이드 함수이다. 퍼셉트론과의 차이점은 활성화 함수 종류뿐이다. 즉, 뉴런이 여러 층으로 이어져 신호를 전달하는 구조는 퍼셉트론과 동일하다.
계단함수와 시그모이드 함수 비교
- 두 활성화 함수의 차이점은 ‘매끄러움’으로 시그모이드 함수는 입력에 따라 출력이 연속적으로 변화하는 반면에 계단함수는 0을 경계로 출력값이 바뀐다
- 즉, 퍼셉트론에서는 뉴런 사이의 값이 0 또는 1을 출력하는 반면에, 신경망에서는 0~1 사이에 연속된 값을 출력한다
- 그러나 큰 관점에서 두 함수는 동일한 모형으로 입력값이 작으면 출력이 0에 가깝고 입력값이 크면 출력이 1에 가깝다
시그모이드(Sigmoid) 함수
ReLU 함수
최근 ReLU(Rectified Linear Unit) 함수가 주로 이용된다.
ReLU 함수
2.3 비선형 함수의 필요성
신경망에서는 활성화 함수로 비선형 함수를 사용해야 하며, 그 이유는 신경망에서 활성화 함수로 선형 함수로 사용하면 층을 깊게 하는 의미가 없어진다.
예를 들어 활성화 함수가 라고 하자. 이 함수를 이용하여 3층의 네트워크 구조를 설계하여 식으로 나타내면, 다음과 같아진다. 이는 로 치환하면 와 같은 식이다.
즉, 선형함수로 사용하는 경우 층을 아무리 깊게 해도 은닉층이 없는 네트워크와 동일해진다. 이로 인해 신경망의 주요 특징인 여러 층을 이용하는 이점이 사라지기 때문에 반드시 활성화 함수로 비선형 함수를 이용해야 한다(계단함수와 시그모이드 함수는 모두 비선형 함수).
3. 3층 신경망 예시
앞서 정의한 대로 3층 신경망은 가중치를 갖는 층이 3개로 입력층(0층) 1개와 은닉층(1,2층) 2개, 끝으로 출력층(3층) 1개이다.
3.1 표기법
예시에서 동일한 변수가 여러번 나오면서 식이나 그림을 보고 이해하기 어려울 수 있다. 따라서, 예시 설명을 위해 다음과 같은 표기 방법을 정의한다.
- : 다음 층의 번째 뉴런
- : 이전 층의 번째 뉴런
- : 층의 가중치
예를 들어 는 입력층 2번째 뉴런인 가 다음 출력층(1층)의 1번째 뉴런인 를 계산하는데 사용되는 가중치를 의미한다.
참고
여기서는 가중치의 인덱스 순서가 ‘다음 층 번호, 앞 층 번호’ 순으로 작성했다
3.2 신호 전달 과정
입력층 → 1층
입력층 → 1층 신호체계
앞에서 편향 노드를 설명했듯이 기존 뉴런에서 편향을 의미하는 뉴런을 추가했다. 아래는 1층의 1번째 뉴런의 가중치 합인 에 대한 수식이다.
아래는 행렬의 곱을 이용하여 1층의 가중치 부분을 간소화 시킬 수 있다.
활성화 함수에서 다뤘듯이 1층의 뉴런의 최종 결과는 가중치 합()이 아니다. 가중치 합을 활성화 함수()에 넣어서 최종 출력값인 이 다음 2층의 입력값이 된다.
1층 → 2층
1층 → 2층 신호체계
로직은 이전과 동일하며, 주의할 점은 입력값이 가 아닌 1층 활성화 함수의 출력값인 다.
마찬가지로 2층에서의 가중치 합인 를 활성화 함수()에 넣어 최종 출력값인 가 다음 출력층의 입력값이 된다.
2층 → 출력층
2층 → 출력층 신호체계
로직은 이전과 동일하지만, 추가로 다른 점이 활성화 함수가 은닉층 활성화 함수 가 아닌 로 다르다.
동일하게 3층에서의 가중치 합인 를 출력층 활성화 함수 에 넣어 출력층인 를 산출한다.
출력층의 활성화 함수
출력층의 활성화 함수는 문제 정의에 따라 다르며, 일반적으로 아래와 같이 활용된다.
- 회귀에서는 항등 함수, 2 클래스 분류는 시그모이드 함수, 다중 클래스 분류는 소프트맥스 함수
4. 출력층 설계
신경망은 분류와 회귀 모두에 이용할 수 있고, 어떤 문제냐에 따라서 마지막 출력층의 활성화 함수가 달라진다.
4.1 항등 함수와 소프트맥스 함수
항등 함수
일반적으로 회귀 모델에서 사용되며, 입력 신호가 그대로 출력 신호가 되는 함수다.
소프트맥스 함수
일반적으로 분류 모델에서 사용되며, 지수함수 기반으로 하나의 출력 신호는 모든 입력 신호를 받는다.
- : 출력층의 뉴런 수
- : 번째 뉴런의 소프트맥스 함수 출력값
4.2 소프트맥스 함수 구현
오버플로우 방지
지수 함수는 입력 값이 크면 결과값이 매우 커진다. 이처럼 결과값이 무수히 커지게 되면 컴퓨터가 수를 나타내는 Byte는 유한하기 때문에 무한대를 의미하는 inf를 뱉는 overflow 문제가 발생한다.
이를 방지하고자 샘플의 최댓값을 이용한다. 아래 식처럼 지수함수의 성질로 어떤 수를 더해도 결과는 바뀌지 않는다. 따라서, 일반적으로 최댓값을 빼서 오버플로우 문제를 방지한다.
확률 해석
소프트맥수 함수의 출력은 0에서 1.0 사이의 실수이고, 총합은 1이다.
출력의 합이 1이라는 성질을 이용해서 확률로 해석할 수 있다. 즉, 소프트맥스 함수를 이용하여 문제를 확률적(통계적)으로 대응할 수 있다.
참고로, 소프트맥스는 지수 함수로 단조 증가 함수의 성질에 따라 뉴런의 대소 관계는 변하지 않는다. 따라서 신경망을 이용한 분류 모델에서는 단순히 가장 큰 출력을 내는 뉴런에 해당하는 클래스라는 의미이기 때문에 소프트맥스 함수 적용을 생략하는 것이 일반적이다.
학습과 추론
- 머신러닝이나 딥러닝은 학습과 추론으로 구분한다
- 학습은 정답 레이블을 알고 있는 상태에서 모델을 학습하는 것이고, 추론은 정답을 모르는 상황에서 학습시킨 모델을 데이터에 적용한다
- 분류 모델의 경우 학습 단계에서 출력층에 소프트맥스 함수를 적용하는 반면에 추론 단계에서는 소프트맥스 함수를 생략한다
참고사이트
- 밑바닥부터 시작하는 딥러닝1