일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sqld
- 영어문장
- 너비우선탐색
- TOEIC Vocabulary
- 수리능력
- 토익시험준비
- 영문법
- 주어
- 알고리즘
- dfs
- 자료해석
- 문제해결능력
- NCS수리자료해석
- 토익문법노트
- 토익단어
- 공기업공부
- TOEIC
- 자바스크립트
- 데이터베이스
- 브루트포스
- 다이나믹프로그래밍
- 파이썬
- 영단어암기
- 영단어
- 매일매일NCS
- 토익 영단어
- 토익문법정리
- BFS
- BOJ
- TOEIC문법
- Today
- Total
하나씩 알아가기
[딥러닝_003] 신경망1(계단 함수와 시그모이드 함수 구현) 본문
퍼셉트론에서 신경망으로
신경망의 예
은닉층의 뉴런은 사람 눈에는 보이지 않습니다. 아래 그림에서 보면 입력층이 0층, 은닉층이 1층, 출력층이 2층입니다. 그림의 신경망은 3층으로 구성되어 있다고 볼 수 있지만 가중치를 갖는 층은 2개 뿐이기 때문에 2층 신경망이라고 합니다.
활성화 함수의 등장
활성화 함수(activation function)는 입력 신호의 총합을 출력 신호로 변환하는 함수를 말합니다.
[식1]은 가중치가 달린 입력 신호와 편향의 총합을 계산하고, 이를 a라 합니다. 그리고 [식2]는 a를 함수 h()에 넣어 y를 출력하는 흐름입니다.
기존 뉴런의 원을 키우고, 그 안에 활성화 함수의 처리과정을 명시적으로 그려넣었습니다. 즉, 가중치 신호를 조합한 결과가 a라는 노드가 되고, 활성화 함수 h()을 통과하여 y라는 노드로 변환되는 과정이 분명하게 나타나 있습니다.
활성화 함수는 임계값을 경계로 출력이 바뀌는데, 이런 함수를 계단(step function)함수라고 합니다. 퍼셉트론에서는 활성화 함수로 계단 함수를 이용합니다. 즉, 활성화 함수로 쓸 수 있는 여러 후보 중에서 퍼셉트론은 계단 함수를 채용하고 있습니다.
시그모이드 함수(sigmoid function)
시그모이드(sigmoid)란 'S자 모양'이라는 뜻입니다. 다음은 신경망에서 자주 이용하는 활성화 함수인 시그모이드 함수를 나타낸 식입니다.
exp() 함수는 exponential로 e^(-x)를 뜻합니다(e는 자연상수로 2.7182... 순환하지 않는 무한소수). 신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달합니다.
계단함수 구현하기
넘파이를 이용하여 계단함수를 구현해 보겠습니다.
x라는 넘파이 배열을 준비하고 그 넘파이 배열에 부등호 연산을 수행하겠습니다.
넘파이 배열에 부등호 연산을 수행하면 배열의 원소 각각에 부등호 연산을 수행할 bool 배열이 생성됩니다.
bool말고 int형을 출력하는 함수를 원하기 때문에 바꿔주겠습니다.
넘파의 배열의 자료형은 astype() 메서드를 이용하여 변환할 수 있습니다.
계단 함수 구현하기
np.arange(-5.0, 5.0, 0.1)로 -5.0에서 5.0전까지 0.1 간격의 넘파이 배열을 생성합니다. 그리고 step_function()은 인수로 받은 넘파이 배열의 원소 각각을 인수로 계단 함수 실행해, 그 결과를 다시 배열로 만들어 돌려줍니다.
시그모이드 함수 구현하기
matplotlib 라이브러리를 통해 그래프로 나타내는 과정은 같고 sigmoid(x) 함수만 바꿔 주었습니다.
계단 함수와 시그모이드 함수의 가장 큰 차이점은 '매끄러움'일 것입니다. 변화의 불연속적임과 연속적임, 디지털과 아날로그와 같습니다. 매끄러움의 차이를 제외하면 두 함수는 큰 관점에서 같은 모양을 하고 있습니다.
무언가를 입력했을 때 출력이 입력의 상수배만큼 변하는 함수를 선형 함수라고 합니다. 한편, 비선형 함수는 문자 그대로 '선형이 아닌' 함수입니다. 즉, 직선1개로는 그릴 수 없는 함수를 말합니다. 두 함수는 모두 비선형 함수에 속합니다.
신경망에서는 활성화 함수로 비선형 함수를 사용해야 합니다(그래서 구현해 본 것이겠죠?ㅎㅎ). 그 이유는바로 선형 함수를 사용하면 신경망의 층을 깊게 하는 의미가 없어지기 때문입니다.
'딥러닝' 카테고리의 다른 글
[딥러닝_002] 퍼셉트론 (0) | 2021.05.12 |
---|---|
[딥러닝_001] matplotlib 데이터 시각화 (0) | 2021.05.12 |