3장 신경망

이주희·2022년 10월 24일
0

퍼셉트론과 신경망

퍼셉트론


편향을 명시한 퍼셉트론

가중치가 b이고 입력이 1인 뉴런이 추가 (편향)
편향의 입력신호는 항상 1

  • 장 : 복잡한 함수도 표현 가능
  • 단 : 가중치 값은 직접 정해줘야함

-> 신경망 이용

: 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력을 가짐

신경망


가중치를 갖는 층은 2개 > 2층 신경망

입력층 - 은닉층 - 출력층 으로 나누어짐

활성화 함수

입력 신호의 총합출력 신호로 변환하는 함수
ex) y = h(b + w1x1 + w2x2)
일때의 h함수

한마디로 위에서 x1w1 + x2w2 +b = a일 때 b의 크기에 따라 0또는 1을 리턴해주는 작업을 하는 함수이다

활성화 함수까지 포함하게 된다면 그림은 위와 같다

계단함수

임계값을 경계로 출력이 바뀜 -> 계단함수
따라서 퍼셉트론에서는 활성화함수로 계단함수를 사용한다 할 수 있다


그래프는 위와 같음
0을 경계로 0에서 1로 변환됨

시그모이드 함수

식은 h(x) = 1/1+exp(-x)와 같다
x를 넣어주면 특정 값을 리턴해주게 된다.

신경망에서는 활성화함수로 시그모이드를 사용해서 출력값을 계산하게 되고 이는 다음 뉴런의 입력값으로 들어가게 된다.


시그모이드 함수 그래프

위의 계단함수와 비교하여 거의 비슷한 출력값이지만 매끈한 모양을 하고있음을 확인할 수 있음
연속적인 실수를 출력값으로 반환함

둘의 공통점으로는 비선형함수

활성화 함수는 모두 비선형이여야 한다

선형함수를 사용하면 층을 깊게하는 의미가 없어지기 때문
ex) 만약 선형 ax로 층을 3개 쌓으면 a^3 한층의 연산결과와 다른점이 없음

RELU 함수

입력이 0이 넘으면 선형으로 출력, 이하면 0을 출력

신경망에서의 행렬곱

기초

두 행렬을 곱셈할 때 python에서는 np.dot(A,B)와 같은 방식 사용

주의점
34 행렬과 4 5 행렬의 곱셈을 할 때

  • 첫번쨰 행렬 뒤의 4와 두번쨰 행렬 앞의 4가 같아야함
  • 두 곱셈을 진행하면 3 * 5행렬이 나옴

2차원 1차원의 곱셈에도 같은 논리 적용

신경망 표기법

입력층의 뉴런 x2에서 다음층 뉴런 a1로 가는 가중치 표기


앞의 수 : 다음 층의 뉴런 순서
뒤의 수 : 앞 층의 뉴런 순서
위의 괄호 수 : 몇층의 가중치인가.. (가중치와 은닉층 뉴런의 오른쪽 위에 붙어있음)

편향은 오른쪽 아래 인덱스 하나뿐임 ( 앞층 뉴런이 없으므로)


따라서 은닉층 첫 뉴런의 입력값은 위와 같게 된다.


입력층 2노드, 1단계 은닉층 3노드인 신경망


한단계 a를 계산하면 위와 같고 모든 노드를 계산하는 것은 행렬의 곱으로 표현 가능하다

행렬 곱셈으로 생각한다면
A : 13
B : 1
3
X : 12
W : 2
3

A = XW +B
1 3 = 12 23 + 1*3
행렬 연산으로도 맞다는것이 확인됨

출력층 설계

분류와 회귀에 따라 출력층의 활성화 함수가 달라진다

회귀 : 항등함수
항등함수 -> 입력을 그대로 출력
은닉층에서의 변화와 마찬가지임

분류 : 소프트맥스 함수


소프트맥스 함수식
모든 지수승의 합에서 차지하는 비율을 뜻함

입력을 그대로 출력하는 항등함수와는 다르게 모든 입력 신호로부터 영향을 받는다
(식의 분모에서 보듯 모든 입력신호의 영향을 받기 때문)

softmax 주의점

  • overflow문제 발생 가능
    지수함수는 e^1000을 하면 inf를 반환하게 됨
    그리고 큰 값의 나눗셈은 결과수치가 불안정해짐

지수함수의 특성에 따라 계산할 떄 어떤 정수를 더하거나 뺴도 값이 동일하다!

따라서 입력 신호중 최대값을 뺴서 계산해주는것이 일반적

소프트맥스 함수는 확률
-> 문제의 통계적 대응 가능
각 원소의 대소관계는 변하지 않음

출력층의 뉴런 수 정하기

mnist dataset : 손글씨 데이터셋

(x_train, t_train), (x_test, t_test) = \load_mnist(flatten = True, normalize = False)

normalize -> true면 정규화 시행
flatten -> 이미지를 1차원 배열로 만들지 결정
true면 1 28 28이 아닌 784의 1차원으로 만들어줌

신경망 구성시 입력층은 뉴런이 784개이고 출력층은 10개이다

배치 처리

0개의 댓글