편향을 명시한 퍼셉트론
가중치가 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 한층의 연산결과와 다른점이 없음
입력이 0이 넘으면 선형으로 출력, 이하면 0을 출력
두 행렬을 곱셈할 때 python에서는 np.dot(A,B)와 같은 방식 사용
주의점
34 행렬과 4 5 행렬의 곱셈을 할 때
2차원 1차원의 곱셈에도 같은 논리 적용
입력층의 뉴런 x2에서 다음층 뉴런 a1로 가는 가중치 표기
앞의 수 : 다음 층의 뉴런 순서
뒤의 수 : 앞 층의 뉴런 순서
위의 괄호 수 : 몇층의 가중치인가.. (가중치와 은닉층 뉴런의 오른쪽 위에 붙어있음)
편향은 오른쪽 아래 인덱스 하나뿐임 ( 앞층 뉴런이 없으므로)
따라서 은닉층 첫 뉴런의 입력값은 위와 같게 된다.
입력층 2노드, 1단계 은닉층 3노드인 신경망
한단계 a를 계산하면 위와 같고 모든 노드를 계산하는 것은 행렬의 곱으로 표현 가능하다
행렬 곱셈으로 생각한다면
A : 13
B : 13
X : 12
W : 23
A = XW +B
1 3 = 12 23 + 1*3
행렬 연산으로도 맞다는것이 확인됨
분류와 회귀에 따라 출력층의 활성화 함수가 달라진다
회귀 : 항등함수
항등함수 -> 입력을 그대로 출력
은닉층에서의 변화와 마찬가지임
분류 : 소프트맥스 함수
소프트맥스 함수식
모든 지수승의 합에서 차지하는 비율을 뜻함
입력을 그대로 출력하는 항등함수와는 다르게 모든 입력 신호로부터 영향을 받는다
(식의 분모에서 보듯 모든 입력신호의 영향을 받기 때문)
softmax 주의점
지수함수의 특성에 따라 계산할 떄 어떤 정수를 더하거나 뺴도 값이 동일하다!
따라서 입력 신호중 최대값을 뺴서 계산해주는것이 일반적
소프트맥스 함수는 확률임
-> 문제의 통계적 대응 가능
각 원소의 대소관계는 변하지 않음
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개이다