신경망 훈련
이제 신경망을 훈련하는 방법을 배웁니다. 또한 Python Deep Learning에서 역 전파 알고리즘과 역방향 전달을 학습합니다.
우리는 원하는 결과를 얻기 위해 신경망 가중치의 최적 값을 찾아야합니다. 신경망을 훈련시키기 위해 우리는 반복적 경사 하강 법을 사용합니다. 처음에는 가중치의 무작위 초기화로 시작합니다. 무작위 초기화 후, 우리는 순 전파 과정을 통해 데이터의 일부 부분 집합을 예측하고, 해당 비용 함수 C를 계산하고, 각 가중치 w를 dC / dw에 비례하는 양, 즉 비용 함수 wrt의 미분으로 업데이트합니다. 무게. 비례 상수를 학습률이라고합니다.
기울기는 역 전파 알고리즘을 사용하여 효율적으로 계산할 수 있습니다. 역방향 전파 또는 역방향 소품의 주요 관찰은 미분의 사슬 규칙으로 인해 신경망의 각 뉴런의 기울기가 뉴런의 기울기를 사용하여 계산 될 수 있으며 나가는 가장자리가 있다는 것입니다. 따라서 우리는 기울기를 거꾸로 계산합니다. 즉, 먼저 출력 레이어의 기울기를 계산 한 다음 최상위 은닉 레이어, 선행 은닉 레이어 등 입력 레이어에서 끝나는 식으로 계산합니다.
역 전파 알고리즘은 대부분 계산 그래프의 개념을 사용하여 구현됩니다. 여기서 각 뉴런은 계산 그래프의 많은 노드로 확장되고 덧셈, 곱셈과 같은 간단한 수학적 연산을 수행합니다. 계산 그래프에는 가장자리에 가중치가 없습니다. 모든 가중치는 노드에 할당되므로 가중치는 자체 노드가됩니다. 그런 다음 역 전파 알고리즘이 계산 그래프에서 실행됩니다. 계산이 완료되면 가중치 노드의 기울기 만 업데이트에 필요합니다. 나머지 그라디언트는 버릴 수 있습니다.
경사 하강 법 최적화 기법
발생하는 오류에 따라 가중치를 조정하는 일반적으로 사용되는 최적화 기능 중 하나는 "경사 하강 법"입니다.
Gradient는 기울기의 또 다른 이름이며, xy 그래프에서 기울기는 두 변수가 서로 어떻게 관련되어 있는지를 나타냅니다. 즉, 런에 따른 상승, 시간 변화에 따른 거리 변화 등입니다.이 경우 기울기는 다음과 같습니다. 네트워크의 오류와 단일 가중치 사이의 비율; 즉, 무게가 변함에 따라 오차가 어떻게 변하는가.
더 정확하게 말하면 어떤 가중치가 가장 적은 오류를 생성하는지 찾고 싶습니다. 입력 데이터에 포함 된 신호를 올바르게 나타내는 가중치를 찾고이를 올바른 분류로 변환하려고합니다.
신경망이 학습함에 따라 신호를 의미에 올바르게 매핑 할 수 있도록 많은 가중치를 천천히 조정합니다. 네트워크 오류와 각 가중치 간의 비율은 미분, dE / dw로 가중치의 약간의 변화로 인해 약간의 오차가 발생하는 정도를 계산합니다.
각 가중치는 많은 변환을 포함하는 심층 네트워크에서 하나의 요소 일뿐입니다. 가중치의 신호는 여러 계층에 걸쳐 활성화 및 합계를 통과하므로 미적분의 연쇄 규칙을 사용하여 네트워크 활성화 및 출력을 통해 다시 작업합니다. 이는 문제의 가중치 및 전체 오류와의 관계로 이어집니다.
오차와 가중치라는 두 변수가 세 번째 변수에 의해 매개되는 경우 activation, 가중치가 전달됩니다. 먼저 활성화의 변화가 오류의 변화에 미치는 영향과 가중치의 변화가 활성화의 변화에 어떤 영향을 미치는지 계산하여 가중치의 변화가 오류의 변화에 어떤 영향을 미치는지 계산할 수 있습니다.
딥 러닝의 기본 아이디어는 그 이상입니다. 더 이상 오류를 줄일 수 없을 때까지 생성되는 오류에 대한 응답으로 모델의 가중치를 조정하는 것입니다.
딥넷은 기울기 값이 작 으면 느리고 값이 높으면 빠르게 학습됩니다. 훈련의 부정확성은 부정확 한 결과로 이어집니다. 출력에서 다시 입력으로 네트를 훈련시키는 과정을 역 전파 또는 역 전파라고합니다. 우리는 순방향 전파가 입력에서 시작하여 앞으로 진행된다는 것을 알고 있습니다. Back prop은 오른쪽에서 왼쪽으로 그라디언트를 계산하는 역 / 반대를 수행합니다.
그라디언트를 계산할 때마다 해당 지점까지 이전 그라디언트를 모두 사용합니다.
출력 레이어의 노드에서 시작하겠습니다. 가장자리는 해당 노드에서 그라디언트를 사용합니다. 히든 레이어로 돌아 가면 더 복잡해집니다. 0과 1 사이의 두 숫자의 곱은 더 작은 숫자를 제공합니다. 그래디언트 값은 계속 작아지고 결과적으로 back prop은 훈련하는 데 많은 시간이 걸리고 정확도가 떨어집니다.
딥 러닝 알고리즘의 과제
과적 합 및 계산 시간과 같이 얕은 신경망과 심층 신경망에는 특정 문제가 있습니다. DNN은 훈련 데이터에서 드문 종속성을 모델링 할 수있는 추가 된 추상화 계층을 사용하기 때문에 과적 합의 영향을받습니다.
Regularization탈락, 조기 중지, 데이터 증가, 전이 학습과 같은 방법은 과적 합을 방지하기 위해 훈련 중에 적용됩니다. 드롭 아웃 정규화는 훈련 중에 숨겨진 계층에서 단위를 무작위로 생략하므로 드문 종속성을 피하는 데 도움이됩니다. DNN은 크기, 즉 레이어 수 및 레이어 당 단위 수, 학습률 및 초기 가중치와 같은 여러 훈련 매개 변수를 고려합니다. 최적의 매개 변수를 찾는 것은 시간과 계산 리소스의 높은 비용 때문에 항상 실용적이지 않습니다. 일괄 처리와 같은 몇 가지 해킹으로 계산 속도를 높일 수 있습니다. GPU의 큰 처리 능력은 필요한 행렬 및 벡터 계산이 GPU에서 잘 실행되기 때문에 훈련 프로세스에 크게 도움이되었습니다.
드롭 아웃
드롭 아웃은 신경망에 널리 사용되는 정규화 기술입니다. 심층 신경망은 특히 과적 합되는 경향이 있습니다.
이제 드롭 아웃이 무엇이며 어떻게 작동하는지 살펴 보겠습니다.
Deep Learning의 선구자 중 한 명인 Geoffrey Hinton의 말에 따르면, '깊은 신경망이 있고 과적 합이 아니라면 아마도 더 큰 것을 사용하고 드롭 아웃을 사용해야합니다.'
드롭 아웃은 경사 하강 법을 반복 할 때마다 무작위로 선택된 노드 세트를 드롭하는 기술입니다. 즉, 존재하지 않는 것처럼 무작위로 일부 노드를 무시합니다.
각 뉴런은 q 확률로 유지되고 확률 1-q로 무작위로 삭제됩니다. 값 q는 신경망의 각 계층마다 다를 수 있습니다. 히든 레이어의 값은 0.5이고 입력 레이어의 값은 0이면 다양한 작업에서 잘 작동합니다.
평가 및 예측 중에는 드롭 아웃이 사용되지 않습니다. 각 뉴런의 출력에 q를 곱하여 다음 계층에 대한 입력이 동일한 예상 값을 갖도록합니다.
드롭 아웃의 배경은 다음과 같습니다. 드롭 아웃 정규화가없는 신경망에서 뉴런은 서로 간의 상호 의존성을 개발하여 과적 합을 초래합니다.
구현 트릭
Dropout은 임의로 선택된 뉴런의 출력을 0으로 유지하여 TensorFlow 및 Pytorch와 같은 라이브러리에서 구현됩니다. 즉, 뉴런이 존재하더라도 출력을 0으로 덮어 씁니다.
조기 중지
경사 하강 법이라는 반복 알고리즘을 사용하여 신경망을 훈련합니다.
조기 중지의 개념은 직관적입니다. 오류가 증가하기 시작하면 훈련을 중단합니다. 여기서 오류 란 하이퍼 파라미터를 조정하는 데 사용되는 학습 데이터의 일부인 유효성 검사 데이터에서 측정 된 오류를 의미합니다. 이 경우 하이퍼 매개 변수가 중지 기준입니다.
데이터 증대
보유하고있는 데이터의 양을 늘리거나 기존 데이터를 사용하고 일부 변환을 적용하여 데이터를 늘리는 프로세스입니다. 사용되는 정확한 변환은 우리가 달성하려는 작업에 따라 다릅니다. 또한 신경망을 돕는 변환은 아키텍처에 따라 다릅니다.
예를 들어, 객체 분류와 같은 많은 컴퓨터 비전 작업에서 효과적인 데이터 증대 기술은 원본 데이터의 잘 리거나 번역 된 버전의 새로운 데이터 포인트를 추가하는 것입니다.
컴퓨터가 이미지를 입력으로 받아들이면 픽셀 값의 배열을받습니다. 전체 이미지가 왼쪽으로 15 픽셀 이동했다고 가정 해 보겠습니다. 우리는 서로 다른 방향으로 많은 다른 이동을 적용하여 원본 데이터 세트 크기의 여러 배에 해당하는 데이터 세트를 증가시킵니다.
전이 학습
사전 훈련 된 모델을 가져와 자체 데이터 세트로 모델을 "미세 조정"하는 프로세스를 전이 학습이라고합니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 아래에 몇 가지 방법이 설명되어 있습니다.
대규모 데이터 세트에서 사전 훈련 된 모델을 훈련합니다. 그런 다음 네트워크의 마지막 계층을 제거하고 임의 가중치를 가진 새 계층으로 교체합니다.
그런 다음 다른 모든 계층의 가중치를 고정하고 네트워크를 정상적으로 훈련시킵니다. 여기서 레이어를 동결해도 경사 하강 법 또는 최적화 중에 가중치가 변경되지 않습니다.
이 개념은 사전 학습 된 모델이 기능 추출기 역할을하고 마지막 레이어 만 현재 작업에 대해 학습된다는 것입니다.