신경 네트워크에 대한 초파라미터 최적화 방법

신경 네트워크의 초파라미터를 최적화하는 방법에 관해서 나는Python모델에서 반복적으로 실험하면서 나의 생각을 정리하고 싶다.동작도 이해하기 어려워서 라이브러리를 사용하지 않고 Python만 씁니다.초파라미터의 종류에 따라 심층 깊이 신경 네트워크 모델을 처리하는 부분도 있다.
사용한 것파이썬 모형은 공개적이니 건의와 오류가 있으면 알려주세요.

하이퍼 매개변수란 무엇입니까?


학습 전에 설정한 다음과 같은 내용은 학습 중에 자동으로 조정된 매개 변수(권중, 편차)와 구별된다.
  • 학습률 ← Part1
  • (±1, Xavier, Gos, He)← Part2
  • 활성화 함수(Sigmoid, Tanh, ReLU) ← Part3
  • 볼륨 리셋 업데이트, 순서 리셋 업데이트, 소량 처리 ← Part4
  • 층수, 신경원수← Part5
  • 매개변수 업데이트 방법(SGD, Adam, AdGard, Momentam, SMPROS, RMSProp)← Part6
  • 정규화 ← Part7
  • 각 하이퍼매개변수는 하나의 부품으로 처리됩니다.이 파트는 오프닝과 학습률의 화제입니다.
    신경 네트워크의 성능은 입력 데이터와 상술한 파이프 파라미터에 의존하기 때문에 후자는 상응하는 시험 오류가 필요하다고 생각한다.이번에 우리는 다음과 같은 네트워크 구성을 통해 초파라미터(이번은 학습률)를 조정하여 학습 횟수와 오차를 개선할 것이다.
    신경 네트워크도

    ・ 학습 횟수와 오차의 이동

    Python 예제 코드


    Tensor Flow와 Caffe 등 신경 네트워크 라이브러리를 사용하지 않고 Python으로 썼습니다.
    동작이 아래의 환경임을 확인했지만, Python 2.7도 살짝 움직여 보았다.
  • Ubuntu 14.04.5 LTS
  • Python Version 3.6.0 |Anaconda 4.3.0 (64-bit)|
  • numpy==1.11.3
  • matplotlib==2.0.0
  • 모형을 만들 때 참고 서적은 다음과 같다.
    학습과 신경 네트워크 곰제이프 (저) / 센베이 출판

    이 6장은 신경 네트워크의 구조와 도출 방법을 상세하게 설명했다.샘플C 프로그램도 실렸지만 아마존 평가과 같이 책에 기재된 입력 데이터로 실행하면 수렴되지 않는다.하지만 아래와 같이 학습 횟수를 20만 회로 늘리면 17만 회 정도가 끝납니다. 이 방법대로 실행해도 잘 안 되는 사람이 있다면 시도해 보세요.
    appendix.txt
    #define NUM_LEARN 200000   // 学習の繰り返し回数をここで指定する
    
    파이썬 모형으로 상술한 책과 같은 초파라미터 설정을 하면 수렴까지 약 11만 회로 어느 정도 재현할 수 있다.나는 출발점으로 최적화를 진행하고 싶다.

    본문의 대상 범위에 관하여


    본고는 고전적인 얕은 신경망과 5층 정도의 깊은 신경망의 초파라미터 검색을 대상으로 권적신경망을 시도하지 않았다(앞으로 시도하고 싶다).또 신경 네트워크의 동작이나 학습 방법 등 동작도 설명하지 않았다.이것은 상술한 서적과 아래에 상세하게 기재된 것이다.특히 다음 서적의 오차 역방향 전파법을 그림으로 설명하는 방법은 이해하기 쉽다.
    0부터 시작하는 Deep Learning - 파이썬에서 배운 딥러닝의 이론과 실시 재토콘이(저)/O'Reilly Japan

    본제에 대한 학습률


    나는 아래의 초 파라미터를 초기 값으로 하고 싶다 = 개선의 여지가 있는 값으로 우선 이 상태를 확인하자.
  • 학습률 0.05
  • 권중 초기치-1과 1의 교체
  • 활성화 함수: Sigmoid
  • 순서권 업데이트 방법
  • 층, 신경원수 입력: 3/중간: 5/출력: 1
  • 매개변수 업데이트 방법: SGD
  • 귀일화: 없음
  • 그림 참조:.

    3 레이어 네트워크 구성, 활성화 함수는 Sigmoid를 사용합니다.권중의 초기값은 +1과 -1의 교체이다.훈련 데이터는 6개에 불과하며 XDATA3 요소 중 1개가 짝수이면 YDATA를 1로 설정합니다.변수(XDATA, YDATA, TDATA, W[])는 소스 코드에 해당하므로 추적 시 참조하십시오.
    상술한 그림은 피드백 시 그림이기 때문에 일부 초파라미터는 그림에 나타나지 않지만 그 중에서도 피드백 그림을 쓸 예정이니 거기서 다시 확인하십시오.
    실행 결과.6개의 훈련 데이터는 모두 오차가 0.01보다 적게 훈련되었다.
    가로축은 학습 횟수, 세로축은 상단의 도표, 오차, 나머지 2개는 n 각 층의 권중 W[0], W[1]의 추이이다.

    학습의 처음과 마지막 값은 큰 변화가 있는데 그 외에 대부분의 곳(100000~600000회)은 오차가 있는 상태에서도 큰 변화가 없어 학습이 진전되지 않은 것을 볼 수 있다.이 기간의 학습을 가속화하기 위해 학습률 0.05→0.5→5→50을 변경해 보았다.다음 소스 코드를 수정하십시오.초기 값은 5입니다.
    neuralnet.py
    EPSILON = 5.0             # Learning Rate
    
    학습률을 높일 때의 학습 횟수 결과를 대수 도표로 만들다.4 샘플이 하나도 부족한 것 같아서 중간값도 측정했습니다.도표에서 볼 수 있듯이 가로축: 학습률과 반비례하는 세로축: 학습 횟수가 감소한다.다만 학습률 50이 너무 큰 것 같아서 오차가 수렴되지 않아 도표에 넣지 않았다.

    이것은 상술한 도표의 오른쪽에서 두 번째 학습률 5.0, 학습 횟수 564의 학습 이동 도표이다.학습률이 0.05일 때와 비교하면 전체 학습 과정에서 오차가 변화하고 효율이 높다는 것을 발견했습니까?그것은 마치 공부하는 것처럼 보인다.

    총결산


    첫 번째 시도의 학습률 0.05에서 특정 훈련 데이터(주황색tr:1)의 오차는 오랫동안 지속되지만 결국 수렴된다.따라서 학습률이 커져도 이 경사를 일찍 내려가면 결국 잘 수렴할 수 있고 실제보다 큰 곳은 일찍 수렴하고 학습 횟수도 줄어들 수 있다.이 점에 관해서는 도입 동량 ※ 등 보다 지능적으로 학습 횟수를 줄일 수 있습니다. ※모멘탈에 관해서는 Part7에서 고찰하고 싶습니다.
    학습률이 너무 큰 경우(이번은 50) 원래는 수렴하지 않지만 이 이하라면 어느 값이든 학습 횟수를 교환하여 수렴한다는 점은 초파라미터의 조정 난이도가 비교적 낮은 쪽일 수 있다.

    다음


    다음 처리의 하이퍼패라메트릭은 가중치의 초기 값입니다.중간층과 출력층 사이의 연결선은 6개이기 때문에 상기 도표의 W[1]에는 3개의 선만 6개가 있어야 한다.이 점에 관해서는 권중의 초기 값을 변경함으로써 대응한다.또 이번 모델보다 2개 층을 늘리고 5층의 깊이 신경망도 처리했다.

    좋은 웹페이지 즐겨찾기