일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- cs50
- express
- 텍스트전처리
- spring-boot3
- PREFECT
- gensim_models
- BFS
- 파이썬
- GET REQUESTS
- pandas-profiling
- neo4j 스키마 정의
- 투포인터
- neo4j 인덱스 사용
- nodemon babel
- gensim
- 플로이드워셜
- 그랜빌의 법칙
- neo4j
- spring-boot2
- 백준 2470
- neo4j 제약조건
- Sequenial
- UnsatisfiedDependencyException
- 첫서버
- gensim size
- 워드 임베딩
- 백준
- 백준 7795
- 백준 회전초밥
- Today
- Total
정리정돈
손실함수를 설정하는 이유 본문
정확도라는 지표를 놔두고 손실 함수의 값이라는 방법을 택하는 이유
신경망 학습에서의 미분의 역할에 대해 생각해보면 된다.
신경망 학습은 최적의 매개변수(가중치와 편향)를 탐색할 때 손실함수의 값을 가능한 작게 하는 매개변수의 값을 찾는다.
매개변수의 미분(기울기)을 계산하고 그 미분 값을 단서로 매개변수의 값을 서서히 갱신하는 과정을 반복한다.
예시로 가상의 신경망이 있고 신경망의 어느 한 가중치 매개변수에 주목한다고 할 때, 이 가중치 매개변수의 손실함수의 미분이란 '가중치 매개변수의 값을 아주 조금 변화 시켰을 때, 손실 함수가 어떻게 변하는가'라는 의미로 볼 수 있다.
만약 미분 값이 음수라면 그 가중치 매개변수를 양의 방향으로 변화시켜 손실 함수의 값을 줄일 수 있고, 반대로 미분값이 양수라면 가중치 매개변수를 음의 방향으로 변화시켜 손실 함수의 값을 줄일 수 있다.
미분값이 0이라면 가중치 매개변수를 어느 쪽으로 움직여도 손실 함수의 값은 줄어들지 않는다. 따라서 가중치 매개변수의 갱신은 거기서 멈추게 된다.
정확도를 지표로 삼아서는 안되는 이유는 여기서 발생하게 된다. 정확도의 미분값은 대부분의 지점에서 0이 되어 매개변수를 갱신할 수 없기 때문이다.
예시로 한 신경망이 100개의 훈련 데이터 중 32장을 올바르게 인식한다면 정확도는 32%일 것이다. 정확도가 지표라면 가중치 매개변수를 조금 바꾼다고 하더라도 32%일 것이다. 이 말은 매개변수를 조정하더라도 정확도는 개선되지 않고 일정하게 유지된다는 것을 뜻한다.
정확도가 만약 개선된다고 하더라도 연속적인 값이 아닌 33%, 34%와 같이 불연속적으로 띄엄띄엄 값이 바뀌어 버리게 된다.
반면 손실함수의 값은 0.878578785... 과 같은 수치로 나타나게 되며 매개변수의 값이 조금 변하게 되면 그에 맞춰서 손실함수의 값도
0.8557575757... 와 같이 연속적으로 변하게 된다는 것이다.
이를 통해 '계단 함수'가 활성화 함수로 사용되지 않는 이유와도 일맥 상통한다.
활성화 함수로 계단함수를 사용하게 된다면 계단함수의 미분은 대부분의 지점에서 0이다. 그 결과 계단 함수를 손실함수로 지표를 삼는다면 아무런 의미가 없게된다. 매개변수의 작은 변화가 주는 파장을 계단 함수가 받아들이지 못하고 손실 함수의 값에는 아무런 변화가 없기 때문이다.
계단 함수는 한순간만 변화를 일으키지만 시그모이드 함수는 출력 값이 연속적으로 변화하고 곡선의 기울기 또한 각 지점마다 연속적으로 변하게 된다.
'개념' 카테고리의 다른 글
미니배치(mini-batch) (0) | 2021.11.03 |
---|---|
동기(Synchronous) 비동기(Asynchronous) (0) | 2021.10.20 |