신경 망 훈련 과정 손실 주의사항

8431 단어
저자: 한 소 양 시간: 2016 년 1 월.출처:http://blog.csdn.net/han_xiaoyang / article / details / 50521064 성명: 판권 소유, 전재 작가 에 게 연락 하여 출처 를 밝 혀 주 십시오.
1. 훈련
앞에서 우 리 는 신경 망 의 정태 적 인 부분 에 대해 토론 했다. 신경 망 구조, 신경 원 유형, 데이터 부분, 손실 함수 부분 등 을 포함한다.이 부분 에서 우 리 는 동태 적 인 부분 을 집중 적 으로 이야기 하 는데 주로 훈련 하 는 일이 다. 실제 공정 실천 훈련 과정 에서 주의해 야 할 점 에 집중 하고 가장 적합 한 파 라 메 터 를 어떻게 찾 는 지 하 는 것 이다.
1.1 경사도 검사
앞에서 언급 한 바 와 같이 우 리 는 수치 사다리 와 해석 법 에 대한 사다리 보다 실제 공사 에서 이 과정 은 실수 하기 쉽다. 다음은 작은 기교 와 주의 점 을 제시한다.
중심 화 공식 을 사용 한 다 는 점 은 우리 가 전에 도 말 했 듯 이 다음 과 같은 수치 경도 계산 공식 을 사용한다. d f (x) d x = f (x + h) - f (x - h) 2 h (좋 은 형식) d f (x - h) d x = f (x - h) - f (x - h) 2 h (좋 은 형식) d f (x) d x = f (x - h) - f (x - f) - 2 h (좋 은 형식) df (x - d x) dx = f (x + h) - f (x - h) 2h (좋 은 형식) df(x) dx = f (x + h) − f (x − h) 2h (좋 은 형식) \ \ \ frac {df (x)} {dx} = \ \ frac {f (x + h) - f (x - h) - f (x - h)} {2h} \ \ hspace {0.1 in} \ \ text{(좋 은 형식)} df (x) dx = f (x + h) dx = f (x + h) − f (x (x + h) - f (x - h) - (x - h) 2h (좋 은 형식) df (x x) dx = f (x + h) dx (x + h) dx = f (x + h) x (좋 은 형식) 2f (x (x x x x x - h) 2h) 2h (좋 은 형식) (x x (x) = 2h f (x + h) − f (x − h) (좋 은 형식) ∇ f (x)경사도 하강 에서 보 이 는 것 과 마찬가지 로 경사도 벡터 입 니 다. Hessian 행렬 은 손실 함수 의 곡 도 를 직관 적 으로 이해 하기 때문에 우 리 는 가장 낮은 점 을 더욱 효율적으로 교체 하고 접근 할 수 있 습 니 다. Hessian 행렬 을 곱 하여 매개 변 수 를 교체 하면 곡 도가 느 린 곳 에서 더욱 급진 적 인 보폭 으로 파 라 메 터 를 업데이트 하고 곡 도가 가 파 른 곳 에 서 는 걸음 이 느 려 집 니 다. 왜냐하면이 상대 적 으로 1 단계 의 업데이트 알고리즘 은 이 점 에서 매우 큰 장점 을 가지 고 있다.
어색 한 것 은 실제 딥 러 닝 과정 에서 2 차 교체 방법 을 직접 사용 하 는 것 이 실 용적 이지 않다 는 점 이다. 헤 시안 행렬 을 직접 계산 하 는 것 은 자원 을 소모 하 는 과정 이기 때문이다. 예 를 들 어 100 만 매개 변수의 신경 망 인 헤 시안 행렬 의 차원 은 [1000000 * 1000000] 이다.3725 G 의 메모 리 를 차지 해 야 합 니 다. 물론, 우 리 는 L - BFGS 라 는 Hessian 매트릭스 와 비슷 한 알고리즘 을 가지 고 있 습 니 다. 메모리 문 제 를 해결 할 수 있 습 니 다. 그러나 L - BFGS 는 일반적으로 모든 데이터 세트 에서 계산 합 니 다. 우리 가 사용 하 는 mini - batch SGD 처럼 작은 batch 에서 교체 되 지 않 습 니 다. 현재 많은 사람들 이 이 문 제 를 연구 하고 있 습 니 다. L - BFGS 도 mini - batch 방식 으로 안정 적 으로 교체 업데이트 할 수 있 도록 노력 하고 있 습 니 다.그러나 현재 로 서 는 대규모 데이터 의 깊이 있 는 학습 은 L - BFGS 나 유사 한 2 차 교체 방법 을 사용 하지 않 고 랜 덤 경사도 가 떨 어 지 는 간단 한 알고리즘 이 광범 위 하 게 사용 되 고 있다.
관심 이 있 는 학생 은 다음 과 같은 문헌 을 참고 할 수 있다.
  • On Optimization Methods for Deep Learning: 2011 년 논문 비교 랜 덤 경사도 하락 과 L - BFGS
  • Large Scale Distributed Deep Networks: google brain 팀 의 논문 은 무 작위 경사도 하락 과 L - BFGS 가 대규모 분포 식 최적화 에서 의 차 이 를 비교 했다.
  • SFO 알고리즘 은 무 작위 경사도 하락 과 L - BFGS 의 장점 을 결합 하려 고 합 니 다.
  • 1.4.4 참가 업데이트 학습 율
    지금까지 여러분 이 본 학 습 률 업데이트 방식 은 모두 전체 국면 에서 같은 학 습 률 을 사용 하 는 것 입 니 다. 학 습 률 을 조정 하 는 것 은 시간 이 많이 걸 리 고 실수 하기 쉬 운 일 입 니 다. 그래서 여러분 들 은 학 습 률 을 자체 적 으로 업데이트 하 는 방식 을 원 했 습 니 다. 심지어 매개 변수 가 더 새 로 워 질 때 까지 세분 화 할 수 있 습 니 다. 지금 은 이런 방법 이 있 습 니 다. 그 중에서 대부분 은 추가 적 인 초 매개 변수 설정 이 필요 합 니 다.장점 은 대부분의 초 매개 변수 설정 에서 죽음 을 쓰 는 학습 율 보다 효과 가 좋다 는 것 이다. 다음은 흔히 볼 수 있 는 적응 방법 (블 로 거들 의 기초 가 약 한 것 을 용서 하고 수학 디 테 일 에 깊이 들 어가 설명 할 수 없다) 을 조금 제시 하 는 것 이다.
    Adagrad 는 Duchi 등 이 논문 Adaptive Subgradient Methods for Online Learning and Stochastic Optimization 에서 제시 한 자가 적응 학 습 률 알고리즘 입 니 다. 간단 한 코드 는 다음 과 같 습 니 다.# dx, x cache += dx**2 x += - learning_rate * dx / np.sqrt(cache + 1e-8)
  • 1
  • 2
  • 3
  • 그 중 변수 cache경사도 와 같은 차원 을 가지 고 있 습 니 다. 그리고 우 리 는 이 변 수 를 사용 하여 경사도 제곱 을 지속 적 으로 누적 합 니 다. 그 후에 이 값 은 매개 변수 업데이트 절차 의 획일 화 에 사 용 됩 니 다. 이런 방법의 장점 은 높 은 경사도 의 가중치 에 대해 효과 적 인 학습 율 이 낮 아 졌 고 작은 경사도 의 가중치 교체 과정 에서 학습 율 이 높 아 졌 습 니 다. 그러나 분모 뿌리 번 호 는 뿌리 를 열지 않 는 것 이 매우 중요 합 니 다.번호 의 효 과 는 루트 번호 의 경우 보다 훨씬 못 합 니 다. 부 드 러 운 매개 변수 1e-8 는 0 으로 나 누 는 것 을 피 합 니 다.
    RMSprop 은 매우 효과 적 이지 만 아직 공개 되 지 않 은 자가 적응 학습 율 업데이트 방법 인 것 같 습 니 다. 재 미 있 는 것 은 현재 이 방법 을 사용 하 는 사람들 이 모두 인용 하고 있 는 대신 Geoff Hinton 의 coursera 과정 6 절의 강의 29 페이지 입 니 다. RMSProp 방법 은 Adagrad 계산법 에 대해 간단 한 최적화 를 하여 교체 강 도 를 늦 추 었 습 니 다.부 드 러 운 처리, 대체적인 설명 코드 는 다음 과 같 습 니 다.cache = decay_rate * cache + (1 - decay_rate) * dx**2 x += - learning_rate * dx / np.sqrt(cache + 1e-8)
  • 1
  • 2
  • 여기 decay_rate 는 수 동 으로 정 해진 초 매개 변수 입 니 다. 우 리 는 보통 [0.9, 0.99, 0.999] 에서 값 을 추출 합 니 다. 특히 주의해 야 할 것 은 x+= 이 누적 부분 은 Adagrad 와 똑 같 지만 cache 자 체 는 반복 적 으로 변화 합 니 다.
    또 다른 방법 은 다음 과 같다.
  • Matthew Zeiler 가 제기 한 Adadella
  • Adam: A Method for Stochastic Optimization
  • Unit Tests for Stochastic Optimization

  • 아래 그림 은 상기 에서 언급 한 여러 가지 매개 변수 업데이트 방법 에서 손실 함수 가 가장 최 적 화 된 설명도 이다.
    ! [파라미터 업데이트 1] (http://cs231n.github.io/assets/nn3/opt2.gif)! [파라미터 업데이트 2] (http://cs231n.github.io/assets/nn3/opt1.gif)
    1.5 초 파라미터 의 설정 과 최적화
    신경 망 의 훈련 과정 에서 많은 초 매개 변수 와 접촉 하 는 것 을 피 할 수 없다. 이것 은 우리 가 수 동 으로 설정 해 야 하 는 것 이다. 대체적으로 다음 과 같다.
  • 초기 학습 율
  • 학 습 률 감소 정도
  • 정규 화 계수 / 강도 (l2 정규 화 강도, dropout 비율 포함)
  • 큰 심층 신경 망 에 있어 서 우 리 는 훈련 하 는 데 많은 시간 이 필요 하 다. 따라서 그 전에 우 리 는 초 매개 변수 검색 을 통 해 최 적 설정 을 확인 하 는 데 시간 을 들 이 는 것 이 필요 하 다. 가장 직접적인 방식 은 프레임 워 크 가 실현 되 는 과정 에서 초 매개 변 수 를 지속 적 으로 바 꾸 어 최적화 시 키 고 모든 초 매개 변수 다음 라운드 의 완전한 훈련 을 기록 하 는 것 이다.실제 공정 에 서 는 신경 망 에서 이러한 초 매개 변 수 를 확인 합 니 다. 우 리 는 일반적으로 n 절 교차 검증 을 거의 사용 하지 않 습 니 다. 일반적으로 고정된 교차 검증 집 을 사용 하면 됩 니 다.
    일반적으로 초 매개 변수 에 대한 시도 와 검색 은 log 필드 에서 이 루어 집 니 다. 예 를 들 어 전형 적 인 학습 율 검색 서열 은 learning_rate = 10 ** uniform(-6, 1) 입 니 다. 우리 선생 은 고 르 게 분 포 된 서열 로 10 을 바탕 으로 지수 연산 을 합 니 다. 사실 우 리 는 정규 화 계수 에서 도 같은 전략 을 했 습 니 다. 예 를 들 어 흔히 볼 수 있 는 검색 서열 은 [0.5, 0.9, 0.95, 0.99] 입 니 다.또한 교차 검증 에서 얻 은 가장 좋 은 초 매개 변수 결과 가 분포 가장자리 에 있다 면 특히 주의해 야 한다. 균일 한 분포 범위 자체 가 불합리 할 수도 있 고 이 검색 범 위 를 넓 히 면 더 좋 은 매개 변수 가 있 을 수도 있다.
    1.6 모델 융합 과 최적화
    실제 공정 에서 마지막 신경 망 효 과 를 효과적으로 향상 시 킬 수 있 는 방식 은 여러 개의 독립 된 모델 을 훈련 시 켜 예측 단계 에서 결 과 를 선택 하 는 중 수 를 선택 하 는 것 이다. 모델 융합 은 어느 정도 의합 현상 을 완화 시 켜 마지막 결과 에 어느 정도 도움 이 되 고 우 리 는 같은 문제 의 서로 다른 독립 모델 을 얻 을 수 있다.
  • 서로 다른 초기 화 파 라 메 터 를 사용 합 니 다. 먼저 교차 검증 으로 가장 좋 은 초 파 라 메 터 를 확인 한 다음 에 서로 다른 초기 값 을 선택 하여 훈련 을 한 결과 모델 은 어느 정도 차이 가 있 습 니 다.
  • 교차 검증 정렬 이 앞 선 모델 을 선택 합 니 다. 교차 검증 으로 초 매개 변 수 를 확정 할 때 top 의 일부 초 매개 변 수 를 선택 하여 각각 훈련 과 모델 링 을 합 니 다.
  • 훈련 과정 에서 서로 다른 시간 대의 모델 을 선택한다. 신경 망 훈련 은 확실히 시간 이 많이 걸 리 는 일이 다. 따라서 어떤 사람들 은 모델 이 일정한 정확 도 를 훈련 한 후에 서로 다른 시간 대의 모델 을 취하 여 융합 시킨다. 그러나 비교적 뚜렷 한 것 은 모델 간 의 차이 점 이 비교적 적 고 한 번 의 훈련 에서 도 모델 이 융합 되 는 수익 이 있다 는 것 이다.

  • 또 하나의 효과 적 인 모델 효 과 를 개선 하 는 방법 은 훈련 후기 에 중간 모델 의 가중치 와 마지막 모델 의 가중치 를 유지 하고 이들 에 게 평균 을 구 한 다음 에 교차 검증 집에 서 테스트 결 과 를 구 하 는 것 이다. 보통 직접 훈련 한 모델 결과 보다 1, 2% 포인트 높다. 그릇 모양 의 구조 에 대해 직관 적 으로 이해 하면 우리 의 가중치 가 많 을 때 가 많다 는 것 이다.모두 최저점 부근 에서 이리 저리 뛰 어 다 니 지만 진정 으로 최저점 에 도달 할 수 없 으 며, 두 최저점 부근의 위 치 는 평균 을 구하 면 더 높 은 확률 로 최저점 에서 더 가 까 운 위치 에 떨 어 질 수 있다.
    2. 총화
  • 일부 데이터 로 경사도 계산 이 정확 한 지 시험 하고 언급 한 주의 점 에 주의 하 세 요.
  • 초기 가중치 가 합 리 적 인지, 정규 화 항목 을 끄 는 시스템 에서 100% 정확 도 를 얻 을 수 있 는 지 확인 하 세 요.
  • 훈련 과정 에서 손실 함수 결 과 를 기록 하고 훈련 집 과 교차 검증 집의 정확 도 를 기록한다.
  • 가장 흔히 볼 수 있 는 가중치 업데이트 방식 은 SGD + Momentum 입 니 다. RMSProp 자가 적응 학습 율 업데이트 알고리즘 을 추천 합 니 다.
  • 시간 이 지 날수 록 서로 다른 방식 으로 학습 율 을 감소 시 켜 야 한다.
  • 교차 검증 등 으로 가장 적합 한 초 매개 변 수 를 검색 하고 찾 습 니 다.
  • 모델 융합 작업 도 하면 결과 에 도움 이 된다 는 것 을 기억 하 세 요.
  • 참고 자료 와 원문
    cs 231 n 신경 망 훈련 및 주의 점

    좋은 웹페이지 즐겨찾기