활성함수
특징: 연산 속도 느리고 그레디언트 소실 원인 --> 신경망 학습에 좋지 않음
: 값을 고정 범위로 만들어주는 스퀴싱 기능이 필요한 구조에선 사용
특징
뉴런의 활성과 비활성 상태를 1과 0으로 표현
모든 구간에서 미분값이 0이므로 역전파 적용 불가
계단함수는 역전파를 사용할 수 없지만 이 함수는 미분 가능하다.
S자 형태
함숫값의 범위 [0,1]
모든 구간에서 미분이 가능하고 증가함수이기에 미분값은 항상 양수이다.
양수만 출력하므로 학습 기울기가 진동하여 학습속도 느림.
최적화 경로가 최적해를 향해 바로 못 가고 좌우로 진동하면서 간다.
지수함수가 포함되어 연산 비용이 많이 든다
그래디언트 포화가 발생하여 학습이 중단
*포화: 입력값이 변해도 함숫값이 변화하지 않는 상태
*그래디언트 포화: 시그모이드 함수 끝부분에서 미분값이 0으로 포화되는 상태
-- 이 의미가 원함수가 특정 값에 수렴을 하게 되면 미분값이 고정이 되어서 0이 된다는 것인가요?
https://m.blog.naver.com/since201109/220838840503
S형함수이다.
함숫값이 [-1, 1]이다
함수 정의에 지수 함수가 포함되어 있어서 연산 비용이 많이 든다
그래디언트 포화가 발생하여 학습이 중단
시그모이드 함수의 선형 변환식
입력값 >= 0이라면 그대로 통과
입력값이 < 0이라면 0을 출력(음수구간의 데이터는 0이 되어서 추가 연산량이 줄어든다)
즉, 입력값이 양수인 경우에만 활성 상태
포화문제 해결
연산이 단순하기 때문에 추론이 빠르다
미분 계산이 필요 없다
양수구간이 선형함수이기에 그레디언트 소실이 생기지 않아 안정적 학습이 가능하다
양수만 출력하기에 학습 경로가 진동하면서 학습 속도가 느려짐
죽은 ReLU가 발생하여 학습이 진행되지 않을 수 있다(P74)
죽은 ReLU문제를 해결하기 위해 음수 구간이 0이 되지 않도록 약간의 기울기를 준 것
음수 구간의 기울기를 주면 작은 그레디언트가 생겨서 학습 속도가 빨라지지만 기울기가 고정이 되어있기에 최적 성능을 내긴 쉽지 않다.
기울기가 작지만 큰 음숫값이 들어오면 출력값이 -무한대로 발산한다
뉴런별로 기울기 학습이 가능하여 성능 개선이 된다
학습시켜야할 대상을 보고 역전파에 의해 값을 변형시킴
데이터셋이 클 때는 좋지만 작을 때는 오버피팅 가능성
기울기가 작지만 큰 음숫값이 들어오면 출력값이 -무한대로 발산한다.
활성함수를 구간 선형 함수로 가정해서 각 뉴런에 최적화된 활성함수를 함수를 통해서 찾기.
뉴런별로 선형 함수 여러 개 학습 후 최댓값 취하기.
ReLU의 일반화된 형태
맥스아웃 유닉: 학습을 위해 뉴런을 확장한 구조로 선형 함수를 학습하는 선형 노드와 최댓값을 출력하는 노드로 구성이 된다.
선형노드: 뉴런의 가중합산 같은 형태
최댓값출력노드: 구간별 최댓값을 갖는 선형함수 선택
볼록 함수 근사 능력: 선형 노드의 개수에 따라 다르다. 선형 노드
i) 선형 노드 개수 2개 : ReLU와 절댓값 함수 근사 가능
ii) 선형 노드 개수 5개 : 2차 함수를 근사한다.
구글 브레인에서 찾음
AutoML로 찾은 최적의 활성화 함수입니다.
선형함수 X와 시그모이드의 곱형태이다
인공 신경망의 성능에 최적
무한한 값을 가진다
학습하는 동안 0근처에서 기울기 값이 포화되는 것을 막는다
네트워크 안에서 정보를 잘 흐르게 함으로 초기값과 학습률에 더 민감하다
음의 값에 대한 제한이 있기에 강한 정규화 효과를 주고과적합을 줄일 수 있다
작은 음수 값에도 음수 결과값이 만들어지기 때문에 표현력을 증가시키고 기울기 흐름 개선
논문에서 실험 결과를 ReLU와 Swish를 비교함
http://www.ki-it.com/_common/do.php?a=current&b=21&bidx=2369&aidx=27726
code
크기: 너비와 깊이로 정해진다
너비: 계층별 뉴런의 수
깊이: 계층의 수
데이터 관계 복잡하다면, 학습 뉴런 수 줄여주기
추상화 수준이 높다면, 계층 수 줄이기
허나, 이걸 보자마자 파악하는 건 어렵습니다. 그러므로 적절한 모델의 크기를 알려면 경험적이나 통상적인 크기 범위 정하고 성능 분석 후 최적 크기 탐색
파라미터별로 구간 정하여 등간격으로 값을 샘플링한다
3개씩 정해진다.
grid에 해당되는 모든 값들을 한번 씩 훈련시켜서 가장 좋은 조합찾기
병렬 탐색 진행이다
grid해당 점만 테스트가 가능하다.
여러 파라미터 조합하여 랜덤하게 값 샘플링한다.
9개씩 정해짐
다양한 조합이 가능
골고루 테스트할 수 있기에 성능이 좋음
최종 선택 조합이 정말 최선인지 확인은 어렵다
최적 조합 찾는데 많은 시간이 걸림
자동 모델 탐색 방법
최적의 모델 생성 방법으로 하는 강화학습
유전 알고리즘
베이지안 기법 구현
*너비,깊이,해상도를 동시에 늘린 것이 가장 좋다
시그모이드 함수 포화: 함수 양 끝부분에 그레디언트 포화가 발생하여 학습 중단이 된다
시그모이드 함수 or 소프트 맥스 + 크로스 엔트로피 손실(출력계층) : 일부 구간에서 포화 발생 안함
ReLU 와 softplus(양수 구간 포화 안됨)
문제: 활성함수의 출력이 항상 양수이면 학습 경로의 방향이 크게 진동하여 느려지는 문제가 일어난다
원인:
양수만 출력하는 활성함수를 모두 은닉계층에서 사용
-> 첫 은닉계층을 제외한 모든 입력은 양수
뉴런이 계속 0을 출력하는 상태
가중치를 초기화 못하거나 학습률이 매우 클 때 발생
가중치 음수, 가중합산이 음수가 되어 ReLU는 0을 출력하고 그레디언트도 0이되어 학습 진행 안됨
--> 근사 방식(근접한 값)으로 함수를 표현하기 때문에 약간의 미분 오차는 결과에 영향을 안 줌
i) 미분이 가능하면 구간 내에서 정상적으로 미분하여 학습 (우미분 값 == 좌미분 값)
ii) 미분이 불가능하면 우미분 혹은 좌미분 값 중 하나를 선택하여 학습( 우미분 값 != 좌미분 값)