일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 최댓값
- join
- 오차제곱합
- COUNT
- sum
- next.js 튜토리얼
- 교차엔트로피오차
- 시험데이터
- 렐루함수
- 수치미분
- sigmoid
- Pointwise Convolution
- 미니배치
- Next.js
- AVG
- max
- MIN
- Depthwise Convolution
- Depthwise Separagle Convolution
- 평균
- 제약조건
- PYTHON
- total
- 데이터베이스
- 학습 구현
- 신경망
- PyQt5
- sqlite3
- 합계
- 밑바닥부터 시작하는 딥러닝
- Today
- Total
우잉's Development
Chaper 3 신경망 본문
저번 게시글에서 배운 내용은 퍼셉트론입니다.
퍼셉트론의 장점은 이론상 복잡한 함수표현이 가능하고 단점은 가중치를 인간이 수동적으로 해야한다는 겁니다.
이 단점을 보완하기 위해 신경망이 나왔습니다.
3.1 퍼셉트론에서 신경망으로
3.1.1 신경망의 예
|
3.1.2 퍼셉트론 복습
\(y = \begin{cases} 0 & b+w_1x_1+w_2x_2 \le \theta \\ 1 & b+w_1x_1+w_2x_2 > \theta \end{cases} \)
\(x_1\), \(x_2\) : 입력신호
\(y\) : 출력신호
\(w_1\), \(w_2\) : 각 신호의가중치
\(b\) : 편향
가중치가 b고 입력이 1인 뉴런이 추가 되었습니다. 퍼셉트론의 동장은 \(x_1\), \(x_2\), 1이라는 3개의 신호가 뉴런에 입력되어, 각 신호에 가중치를 곱한 후, 다음 쥬런에 전달 됩니다. 이신호들의 값을 더하여, 그 합이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 추력합니다.
위의 식에서 더 간결하게 작성해봅시다.
\(y = h(b+w_1x_1+w_2x_2)\)
\(h(x) = \begin{cases} 0 & x \le 0 \\ 1 &x > 0 \end{cases} \)
\(h(x)\)함수는 입력이 0을 넘으면 1을 돌려주고 그렇지 않으면 0을 돌려줍니다.
3.1.3 활성화 함수의 등장
위에서 입력신호의 총합을 출력신호로 변환하는 함수로 \(h(x)\)함수가 등장했습니다. 이 함수를 활성화 함수라 합니다.
즉, 입력신호의 총합이 활성화를 일으키는지 정하는 역할을 합니다.
위에서 다룬 식은 아래와 같이 2단계로 처리됩니다.
\(a = b +w_1x_1+w_2x_2 \)
\(y = h(a) \)
가중치의 신호를 조합한 결과가 \(a\)라는 노드가 되고 활성화 함수 \(h( )\)를 통과 하여 \(y\)라는 노드로 변환하는 과정입니다.
여기서 퍼셉트론이라는 말이 가리키는 알고리즘은 통일하지는 않습니다. 일반적으로 단순 퍼셉트론은 계단함수를 활성화 함수로 사용한 모델을 가르키며 다층 퍼셉트론은 신경망을 가리킵니다.
3.2 활성화 함수
활성화 함수는 임계값을 경계로 출력이 바뀝니다. 이런 함수를 계단함수(step function)이라고 합니다.
3.2.1 시그모이드(sigmoid)함수
\(h(x) = {{1} \over {1+e^{-x}}}\)
\(e\)는 자연상수로 2.7182...의 값을 갖는 실수입니다.
신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달합니다.
퍼셉트론과 신경망의 주된 차이는 활성화 함수뿐입니다.
이 예에서는 배열 \(x\)의 원소 각각이 0보다 크면 True고, 0보다 작으면 False로 변환한 새로운 배열 \(y\)가 생성됩니다. \(y\)의 원소는 bool형태입니다. 그러나 계단함수는 0이나 1의 'int형'이 출력되는 함수이므로 \(y\)의 원소를 int형태로 변환해야합니다. int형 변환은 옆의 그림에서 y.astype(np.int)를 사용하면됩니다. 따라서 False는 0 ,True는 1로 출력됩니다. |
3.2.3 계단함수의 그래프
그래프를 그리기위해서 matplotlib라이브러리를 사용합니다. np.arange(-5.0, 5.0, 0.1)은 -5.0부터 5.0까지 0.1씩 증가하는 행렬인 [-5.0, -4.9, -4.8, ... , 4.9]를 나타냅니다. ylim은 y축의 범위입니다. 계단함수는 0을 기준으로 출력이 0에서 1로 또는 1에서 0으로 바뀝니다.
3.2.4 시그모이드 함수 구현하기
시그모이드 함수는 왼쪽과 같이 구현이 됩니다. 이 함수가 넘파이 배열도 처리할 수 있는 이유는 넘파이의 브로드캐스트 (broadcast)때문입니다. 브로드캐스트넘파이 배열과 스칼라 값의 연산을 넘파이 배열의 원소 각각과 스칼라 값의 연산으로 바꿔 수행합니다.
브로드캐스트의 예로 옆에 보면 1은 스칼라(1,)값이고 t는 (1,3)행렬입니다. 둘의 값을 연산하려면 같은 행렬이여야 하므로 1이라는 값이 [1, 1, 1]로 (1, 3)행렬로 계산하는 브로드캐스트가 진행됩니다.
시그모이드 함수에서도 이를 이용하여 넘파이의 행렬도 연산할 수 있습니다.
그럼 시그모이드 함수를 그려볼까요?
|
3.2.5 시그모이드 함수와 계단 함수 비교
|
시그모이드 함수와 계단함수를 같은 그래프에 그렸습니다. 파란색이 계단함수, 노란색이 시그모이드 함수입니다.
두 개의 차이점은 매끄러움의 차이가 보입니다. 시그모이드 함수는 부드러운 곡선이며, 출력이 연속적으로 변합
니다. 한편, 계단 함수는 0을 경계로 출력이 갑자기 바뀌어버립니다. 이 매끄러움은 신경망 학습에서 중요한 역할
을 합니다.
그럼 둘의 공통점은 무엇일까요? 둘 다 입력이 작을 때는 0에 가깝고 클 때는 1에 가까우면서 0과 1사이에 존재
합니다. 즉, 계단 함수와 시그모이드 함수는 입력이 중요하면 큰 값을 출력하고 입력이 중요하지 않으면 작은 값
이 출력됩니다.
3.2.6 비선형 함수
계단 함수와 시그모이드 함수의 공통점은 위에 설명한 부분 말고도 둘 다 비선형함수라는 공통점이있습니다.
선형함수는 1개의 곧은 직선으로 표현되면 비선형함수는 말 그대로 선형이 아닌 함수입니다.
왜 활성화 함수로 선형함수는 안될까요? 예를 들어 \(h(x) = cx\)라 합시다. 그럼 \(y = h(h(h(x))) = c*c*c*x\)
이므로 \(y=c^3x\)이고 \(a=c^3\)으로 변환하면 \(y=ax\)로 선형이 됩니다. 이 뜻은 은닉층이 없는 네트워크
라고 할 수 있습니다. 따라서 활성화 함수로는 반드시 비선형 함수여야 합니다.
3.2.7 ReLU 함수 (Rectified Linear Unit, 렐루)
옆에 처럼 python으로 ReLU함수를 정의한다.
\(h(x) = \begin{cases} 0 & x \le 0 \\ x &x > 0 \end{cases} \)
ReLU 함수는 입력이 0을 넘으면 그 입력을 그대로 출력하고, 0이하 이면 0을 출력하는 함수입니다. |
3.3 다차원 배열의 계산
3.3.1 다차원 배열
지금까지는 1차원을 많이 사용했고 이제부터 다차원 행렬에 대해서 설명하겠습니다.
처음 차원은 0차원 다음 차원은 1차원입니다. 그럼 2차원은 배열은 행렬이라고 부릅니다.
행렬이란 가로방향을 행(row), 세로방향 열(column)로 이루어져 있습니다.
차원을 확인하기 위한 python 명령어는 np.ndim()입니다.
3.3.2 행렬의 곱
기본적인 행렬 방법 |
numpy함수에서 행렬의 곱은 np.dot()으로 사용됩니다. |
여기서 주의해야 할 것 한 가지가 있습니다. np.dot(A, B)와 np.dot(B, A)는 결과 값이 다릅니다. 일반적인 연산과 달리 행렬의 곱은 피연산자의 순서가 다르면 결과 가 다릅니다. 예시를 들어 결과를 봅시다.
한 가지 더 중요한 사항은 행렬의 형상에 주의 해야됩니다. 앞의 행렬을 A라 하고 뒤의 행렬을 B라 하면 행렬의 곱을 할때 A의 열과 B의 행의 수가 같아야됩니다.
3.3.3 신경망에서의 행렬의 곱
편향과 활성화 함수를 생략하고 가중치만 갖습니다.
다차원 배열의 스칼라 곱을 구해주는 np.dot함수를 사용하면 단번에 결과 Y를 계산할 수 있스빈다. 만약 np.dot을 사용하지 않으면 for문을 사용하여 복잡해집니다.
chapter3신경망의 내용이 많아서 다음 게시글로 이어가겠습니다.
'Deep Learning 책 리뷰 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
Chapter4 신경망 학습2 (0) | 2022.02.04 |
---|---|
Chapter4 신경망 학습 (0) | 2022.01.28 |
Chapter3. 신경망 2 (0) | 2022.01.25 |
Chapter2. Perceptron(퍼셉트론) (0) | 2022.01.18 |