일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TooBigToInnovate
- r
- React
- 리액트
- frontend
- python
- 쿠버네티스
- 빅쿼리
- 파이썬
- 캐글
- 구글
- 프론트엔드
- Machine Learning
- 머신러닝
- 클러스터링
- ADP 실기
- 최적화
- Kubernetes
- DBSCAN
- 타입스크립트
- ADP
- do it
- 대감집 체험기
- bigquery
- 심층신경망
- 차원 축소
- 대감집
- docker
- LDA
- Kaggle
- Today
- Total
No Story, No Ecstasy
[ADP 실기 with R] 7. Neural Networks 본문
1. Neural Networks
- 퍼셉트론: 각 노드의 입력치*가중치의 합과 활성 함수에 의하여 해당 노드의 활성화 여부가 결정되는 간단한 feedforward 인공 신경망
- 다층 퍼셉트론과 역전파
- 입력층, 은닉층, 출력층으로 구성된 인공 신경망을 다층 퍼셉트론, 은닉층이 2개 이상일 때 심층 신경망이라고 표현
- 역전파 알고리즘은 네트워크의 출력 오차에 각 뉴런이 얼마나 기여했는지를 마지막 은닉층부터 측정하여, 이전 은닉층의 뉴런은 얼마나 기여했는지 입력층에 도달할 때까지 계속 측정하는 것을 의미한다.
- 이렇게 역방향으로 계산한 오차 그래디언트를 네트워크의 모든 연결 가중치에 반영한다(경사 하강법).
- 역전파 알고리즘을 위한 대표적 활성화 함수: 로지스틱, 하이퍼볼릭 탄젠트, ReLU 함수
- 심층 신경망
- 심층 신경망은 얕은 신경망보다 훨씬 적은 수의 뉴런을 사용하기 때문에 파라미터 효율성이 훨씬 좋다.
- 하지만, 하위층으로 오차 그래디언트가 전달될 때 그래디언트 소실이 발생할 수 있다.
- 이를 해결하기 위한 기법들: He 초기화, ELU 활성화 함수 활용, 배치 정규화, 전이 학습, 동결, 캐싱 등
- 과대 적합을 피하기 위한 규제 방법
- 조기 종료(검증 세트의 정확도가 떨어지면 종료)
- L1/L2 규제(비용 함수에 적절한 규제항을 추가하여 연결 가중치에 제약을 가한다)
- 드롭아웃(훈련 스텝마다 각 뉴런에 드롭아웃될 확률 p를 부여)
- 맥스-노름 규제(연결 가중치 제한)
- 데이터 증식(기존 데이터에서 새로운 데이터 생성) 등
- 잘 정리된 링크: todayisbetterthanyesterday.tistory.com/44
- R 코드 예제
# 0. package import
library(neuralnet)
# 1. 신경망 모델 생성
## - threshold: a numeric value specifying the threshold for the partial derivatives of the error function as stopping criteria
## - algorithm: backprop, rprop+, rprop-, sag, sir
## - err.fct: function that is used for the calculation of the error. 'sse' or 'ce'
## - linear.output: 0/1이면 FALSE
net.model = neuralnet(y ~ ., train_data, hidden = 1, threshold = 0.01, algorithm = "rprop+", linear.output = FALSE)
# 2. 학습된 결과 확인
names(net.model)
net.model$result.matrix
plot(net.model)
gwplot(net.model, selected.covariate = xk, min = -2.5, max = 2.5) #분산이 너무 작으면 제외하고 다시 분석한다.
# 3. 새로운 데이터 예측하기
predict(net.model, test_data)
# + multiclass classification
nn.model = neuralnet((y == "setosa") + (y == "versicolor") + (y == "virginica") ~ Petal.Length + Petal.Width, iris_train, linear.output = FALSE)
nn.pred = predict(nn.model, test_data)
table(test_data$y, apply(nn.pred, 1, which.max))
* library(nnet)으로도 기본 모델을 생성할 수 있다.