딥 러닝 성과 개선하는 법
과적합과 싸우고 더 나은 일반화를 얻는 데 사용할 수 있는 20가지 팁, 트릭 및 기술
딥러닝 모델에서 어떻게 더 나은 성능을 얻을 수 있습니까? 가장 많이 묻는 질문 중 하나입니다. 이것은 다음과 같이 바꿔 질문할 수 있습니다.
정확도를 높이려면 어떻게 해야 합니까?
… 또는 다음과 같이 반대로 질문할 수도 있습니다.
신경망의 성능이 좋지 않으면 어떻게 해야 합니까?
저는 종종 “정확히는 모르겠지만 많은 아이디어가 있습니다.”라고 대답합니다. 그런 다음 성능을 향상시킬 수 있다고 생각할 수 있는 모든 아이디어를 나열합니다. 저는 이 글에서 이 모든 아이디어를 공유하고자 합니다. 이 아이디어는 딥 러닝 뿐만 아니라 실제로 모든 머신러닝 알고리즘에 도움이 됩니다.
알고리즘 성능 향상을 위한 아이디어
이 아이디어 목록은 완전하지는 않지만 좋은 시작입니다. 제 목표는 여러분이 생각하지 못한 한두 가지 아이디어를 시도해 볼 수 있는 많은 아이디어를 제공하는 것입니다.
나열된 아이디어 중 하나 이상의 아이디어 또는 확장 사항이 있으면 저와 모든 독자가 도움이 될 것입니다! 다른 사람이 돌파구를 마련하는 데 도움이 되는 하나의 아이디어 일 수 있습니다.
저는 이 아이디어들의 목록을 4 개의 하위 주제로 나누었습니다.
- 데이터로 성능을 개선합니다.
- 알고리즘으로 성능을 개선합니다.
- 알고리즘 튜닝으로 성능을 개선합니다.
- 앙상블로 성능을 향상시킵니다.
이익은 종종 목록 아래로 내려갈수록 작아집니다. 예를 들어, 문제 또는 더 많은 데이터의 새로운 프레이밍은 종종 가장 성능이 좋은 알고리즘의 매개 변수를 조정하는 것보다 더 많은 성과를 거둘 수 있습니다. 항상 그런 것은 아니지만 일반적으로 그렇습니다. 블로그의 자습서에 대한 많은 링크, 관련 사이트의 질문 및 고전적인 Neural Net FAQ에 대한 질문을 포함했습니다. 아이디어 중 일부는 인공 신경망에만 해당되지만 대부분은 매우 일반적입니다. 다른 기술로 성능을 향상시키는 데 사용할 수 있을 만큼 일반적입니다.
1. 데이터로 성능 향상
학습 데이터 및 문제 정의를 변경하여 큰 성과를 거둘 수 있습니다. 아마도 가장 큰 성과일 수도 있습니다. 다음은 우리가 다룰 내용의 짧은 목록입니다.
- 더 많은 데이터를 가져옵니다.
- 더 많은 데이터를 만들어냅니다.
- 데이터 크기를 다시 조정합니다.
- 데이터를 변환합니다.
- 기능을 선택합니다.
1) 더 많은 데이터 가져오기
더 많은 학습 데이터를 얻을 수 있습니까? 모델의 품질은 일반적으로 학습 데이터의 품질에 의해 제한됩니다. 그래서 우리는 문제에 대해 얻을 수 있는 최상의 데이터를 원합니다. 딥 러닝 및 기타 최신 비선형 머신러닝 기술은 데이터가 많을수록 향상됩니다. 특히 딥 러닝은 더욱 그렇습니다. 이것은 딥 러닝을 매우 흥미롭게 만드는 주요 포인트 중 하나입니다. 다음 그림을 보시기 바랍니다.
더 많은 데이터가 항상 도움이 되는 것은 아니지만 도움이 될 수 있습니다. 선택권이 주어지면 제공하는 옵션에 대해 더 많은 데이터를 얻을 수 있습니다.
관련:
2) 더 많은 데이터 만들어내기
딥 러닝 알고리즘은 종종 더 많은 데이터에서 더 잘 수행됩니다. 우리는 마지막 섹션에서 이것을 언급했습니다. 더 많은 데이터를 얻을 수 없다면 더 많은 데이터를 만들어낼 수 있습니다.
- 데이터가 숫자로 구성된 벡터인 경우 기존 벡터의 임의로 수정된 버전을 만듭니다.
- 데이터가 이미지인 경우 기존 이미지의 임의로 수정된 버전을 만듭니다.
- 데이터가 텍스트라면 아이디어를 얻을 수 있습니다 …
종종 이를 데이터증강 또는 데이터생성이라고 합니다. 생성 모델을 사용할 수도 있고, 간단한 트릭을 사용할 수도 있습니다. 예를 들어, 사진 이미지 데이터를 사용하면 기존 이미지를 무작위로 이동하고 회전하여 큰 이득을 얻을 수 있습니다. 새 데이터에서 예상되는 경우 데이터의 이러한 변환에 대한 모델의 일반화를 개선합니다. 이것은 또한 우리가 지터(jitter) 추가라고 부르던 노이즈 추가와 관련이 있습니다. 학습 데이터 세트의 과적합을 억제하는 정규화 방법처럼 작동할 수 있습니다.
관련:
3) 데이터 크기 조정
이것은 빠르게 성과를 얻을 수 있는 방법입니다. 신경망으로 작업할 때의 전통적인 경험 법칙은 다음과 같습니다.
활성화 함수의 범위까지 데이터의 크기를 다시 조정합니다. 시그모이드 활성화 함수를 사용하는 경우 데이터를 0과 1 사이의 값으로 다시 스케일링하십시오. 쌍곡선 탄젠트(tanh)를 사용하는 경우 -1과 1 사이의 값으로 크기를 다시 조정합니다. 이는 입력(x)과 출력(y)에 적용됩니다. 예를 들어, 출력 계층에 이진 값을 예측하는 시그모이드가 있는 경우 y 값을 이진수로 정규화하십시오. softmax를 사용하는 경우에도 y 값을 정규화하면 이점을 얻을 수 있습니다.
이것은 여전히 좋은 경험 법칙이지만 추가적인 개선의 여지가 있습니다. 다음과 같이 몇 가지 다른 버전의 학습 데이터 세트를 만드는 것이 좋습니다.
- 0에서 1로 정규화됩니다.
- -1에서 1로 크기가 조정되었습니다.
- 표준화.
그런 다음 각각에 대한 모델의 성능을 평가합니다. 하나를 선택한 다음 두 배로 줄이십시오.
활성화 기능을 변경하는 경우 이 작은 실험을 반복하십시오.
네트워크에 축적되는 큰 값은 좋지 않습니다. 또한 활성화 및 가중치 정규화와 같이 네트워크에서 숫자를 작게 유지하는 다른 방법이 있지만 이러한 기술은 나중에 살펴보겠습니다.
관련:
4) 데이터 변환
위에서 제안한 재조정과 관련이 있지만 더 많은 작업이 필요합니다. 데이터를 실제로 알아야 합니다. 그것을 시각화하고 이상치를 찾습니다.
각 열의 일변량 분포를 추측합니다.
- 열이 치우친 가우스처럼 보이면 Box-Cox 변환으로 기울이기를 조정하는 것이 좋습니다.
- 열이 지수 분포처럼 보이는지 로그 변환을 고려하십시오.
- 열에 몇 가지 기능이있는 것처럼 보이지만 명백한 것, 제곱 또는 제곱근을 시도하는 것으로 인해 방해를 받고 있습니까?
- 일부 기능을 더 잘 강조하기 위해 어떤 방식 으로든 기능을 분리하거나 범주화할 수 있습니까?
당신의 직감에 기대십시오. 시도해보십시오.
- PCA와 같은 프로젝션 방법으로 데이터를 사전 처리할 수 있습니까?
- 여러 속성을 단일 값으로 집계할 수 있습니까?
- 새로운 boolean 플래그로 문제의 흥미로운 측면을 노출할 수 있습니까?
- 시간적 또는 다른 구조를 다른 방식으로 탐구 할 수 있습니까?
신경망은 특징 학습을 수행합니다. 그들은이 일을 할 수 있습니다.
그러나 학습을 위해 문제의 구조를 네트워크에 더 잘 노출시킬 수 있다면 문제를 훨씬 빨리 학습할 수도 있습니다.
데이터 또는 특정 속성의 다양한 변환을 확인하고 작동하는 것과 작동하지 않는 것을 확인하십시오.
관련:
- 머신러닝 문제를 정의하는 방법
- 기능 엔지니어링, 기능 엔지니어링 방법 및 기능을 능숙하게 수행하는 방법 알아보기
- Scikit-Learn을 사용하여 Python에서 머신러닝을 위해 데이터를 준비하는 방법
5) 기능 선택
신경망은 일반적으로 관련 없는 데이터에 대해 강력합니다.
그들은 거의 0에 가까운 가중치를 사용하고 비예측 속성의 기여를 배제할 것입니다.
그럼에도 불구하고 그것은 좋은 예측을 하는 데 필요하지 않은 데이터에 사용되는 데이터, 가중치, 훈련 주기입니다.
데이터에서 일부 속성을 제거할 수 있습니까?
유지할 기능과 부팅할 기능에 대한 아이디어를 제공할 수 있는 많은 기능 선택 방법과 기능 중요도 방법이 있습니다.
몇 가지를 시도하십시오. 모두 사용해보십시오. 아이디어는 아이디어를 얻는 것입니다.
다시 말하지만, 시간이 있다면 동일한 네트워크에서 문제의 몇 가지 선택된 “보기”를 평가하고 어떻게 수행되는지 확인하는 것이 좋습니다.
- 어쩌면 더 적은 기능으로 잘 또는 더 잘 할 수 있습니다. 예, 더 빨리!
- 어쩌면 모든 기능 선택 방법이 동일한 특정 기능 하위 집합을 부팅 할 수 있습니다. 예, 쓸모없는 기능에 대한 합의.
- 선택한 하위 집합이 수행할 수 있는 추가 기능 엔지니어링에 대한 몇 가지 아이디어를 제공할 수 있습니다. 예, 더 많은 아이디어.
관련:
6) 문제를 재구성하십시오
문제에서 한 걸음 물러서십시오.
수집 한 관찰이 문제를 구성하는 유일한 방법입니까?
어쩌면 다른 방법이있을 수 있습니다. 어쩌면 문제의 다른 틀이 문제의 구조를 학습에 더 잘 노출 할 수 있습니다.
나는이 운동이 당신이 당신의 마음을 열도록 강요하기 때문에 정말 좋아합니다. 어렵습니다. 특히 현재 접근 방식에 (자존심!!!, 시간, 돈)을 투자 한 경우.
3-5 개의 대체 프레임을 나열하고 할인하더라도 적어도 선택한 접근 방식에 대한 자신감을 키우고 있습니다.
- 어쩌면 시간 요소를 창이나 타임 스텝을 허용하는 메서드에 통합 할 수 있습니다.
- 분류 문제가 회귀 문제가 될 수도 있고 그 반대가 될 수도 있습니다.
- 바이너리 출력이 소프트 맥스 출력이 될 수 있습니까?
- 대신 하위 문제를 모델링 할 수 있습니다.
문제를 통해 생각하는 것이 좋으며 솔루션에 대한 투자가 적기 때문에 도구를 선택하기 전에 프레이밍이 가능합니다.
그럼에도 불구하고 막히면 이 간단한 운동으로 아이디어의 샘물을 제공할 수 있습니다.
또한 이전 작업을 버릴 필요가 없습니다. 나중에 앙상블 섹션을 참조하십시오.
관련:
2. 알고리즘으로 성능 향상
머신러닝은 알고리즘에 관한 것입니다.
모든 이론과 수학은 데이터에서 의사 결정 프로세스를 배우는 다양한 접근 방식을 설명합니다(예측 모델링으로 제한하는 경우).
문제에 대해 딥 러닝을 선택했습니다. 정말 당신이 선택할 수있는 최고의 기술입니까?
이 섹션에서는 알고리즘 선택에 대한 몇 가지 아이디어만 다루고, 다음으로 선택한 딥러닝 방법을 최대한 활용하는 세부 사항을 살펴보겠습니다.
다음은 짧은 목록입니다.
- 스팟 체크 알고리즘.
- 문학에서 훔치십시오.
- 리샘플링 방법.
들어가 봅시다.
1) 스팟 체크 알고리즘
어떤 알고리즘이 문제에 가장 잘 수행될지 미리 알 수 없습니다. 알고 있다면 머신러닝이 필요하지 않을 것입니다. 선택한 방법이 좋은 선택이었다는 어떤 증거를 수집했습니까? 이 질문을 뒤집어 봅시다.
가능한 모든 문제에서 성능을 평균화할 때 단일 알고리즘이 다른 알고리즘보다 더 나은 성능을 발휘할 수는 없습니다. 모든 알고리즘은 동일합니다. 이것은공짜 점심 없음 정리의 결과를 요약 한 것입니다.
어쩌면 선택한 알고리즘이 문제에 가장 적합하지 않을 수 있습니다.
이제 가능한 모든 문제를 해결하려는 것은 아니지만 알고리즘 랜드의 새로운 뜨거움은 특정 데이터 세트에서 최선의 선택이 아닐 수 있습니다.
내 조언은 증거를 수집하는 것입니다. 다른 좋은 알고리즘이 있다는 생각을 즐겁게하고 문제에 대한 공정한 기회를 제공하십시오.
최고의 방법 모음을 확인하고 어떤 것이 공정하고 어떤 것이 그렇지 않은지 확인하십시오.
- 로지스틱 회귀 분석 및 선형 차별 분석과 같은 일부 선형 방법을 평가합니다.
- CART, 랜덤 포레스트 및 그라디언트 부스팅과 같은 일부 트리 방법을 평가하십시오.
- SVM 및 kNN과 같은 일부 인스턴스 메서드를 평가합니다.
- LVQ, MLP, CNN, LSTM, 하이브리드 등과 같은 다른 신경망 방법을 평가합니다.
최고 성능자를 두 배로 늘리고 추가 튜닝 또는 데이터 준비를 통해 기회를 개선하십시오. 선택한 딥 러닝 방법에 대한 결과의 순위를 매기고 어떻게 비교합니까? 어쩌면 딥 러닝 모델을 버리고 훨씬 더 간단하고 훨씬 빠르게 훈련할 수 있는 것, 심지어 이해하기 쉬운 것을 사용할 수도 있습니다.
관련:
2) 기존의 문헌에서 가져오기
좋은 방법을 선택하는 가장 좋은 지름길은 기존의 문헌에서 아이디어를 훔치는 것입니다. 당신과 같은 문제에 대해 누가 작업했으며 어떤 방법을 사용했습니까? 논문, 책, 블로그 게시물, Q & A 사이트, 튜토리얼, Google이 던지는 모든 것을 확인하십시오. 모든 아이디어를 기록하고 진행하십시오. 이것은 연구를 복제하는 것이 아니라 성과를 향상시킬 수 있다고 생각하지 못한 새로운 아이디어에 관한 것입니다. 출판된 연구성과는 고도로 최적화 되어 있으므로 아이디어, 자료를 얻기 위한 훌륭한 원천이 됩니다.
관련:
3) 리샘플링 방법
모델이 얼마나 좋은지 알아야합니다. 모델의 성능에 대한 추정치가 신뢰할 수 있습니까? 딥 러닝 방법은 학습 속도가 느립니다. 이는 종종 k-폴드 교차 검증과 같은 모델의 성능을 추정하기 위해 황금 표준 방법을 사용할 수 없음을 의미합니다.
- 어쩌면 간단한 기차 / 테스트 분할을 사용하고있을 수도 있습니다. 그렇다면 분할이 문제를 대표하는지 확인해야 합니다. 일변량 통계와 시각화는 좋은 시작입니다.
- 어쩌면 하드웨어를 활용하여 추정치를 향상시킬 수 있습니다. 예를 들어 클러스터 또는 Amazon Web Services 계정이 있는 경우n-모델을 병렬로 훈련한 다음 결과의 평균 및 표준 편차를 취하여 보다 강력한 추정치를 얻을 수 있습니다.
- 어쩌면 검증 홀드 아웃 세트를 사용하여 훈련 할 때 모델의 성능에 대한 아이디어를 얻을 수 있습니다 (조기 중지에 유용, 나중에 참조).
- 어쩌면 모델 선택을 수행 한 후에 만 사용하는 완전히 블라인드 유효성 검사 세트를 보류 할 수 있습니다.
다른 방법으로 데이터 세트를 더 작게 만들고 더 강력한 리샘플링 방법을 사용할 수 있습니다.
- 전체 데이터 세트에서 학습된 모델과 학습 데이터 세트의 샘플에서 학습된 모델의 성능과 강한 상관 관계가 있을 수 있습니다. 아마도 더 작은 데이터 세트를 사용하여 모델 선택 및 튜닝을 수행 한 다음 최종 기술을 마지막에 전체 데이터 세트로 확장 할 수 있습니다.
- 어쨌든 데이터 세트를 제한하고 샘플을 가져 와서 모든 모델 개발에 사용할 수 있습니다.
모델의 성능 추정치를 완전히 신뢰해야 합니다.
관련:
3. 알고리즘 튜닝으로 성능 향상
종종 스팟 체크를 통해 성능이 우수한 알고리즘을 하나 또는 두 개 발굴할 수 있습니다. 이러한 알고리즘을 최대한 활용하는 데 며칠, 몇 주 또는 몇 달이 걸릴 수 있습니다.
다음은 신경망 알고리즘을 더 많이 활용하기 위해 조정하는 방법에 대한 몇 가지 아이디어입니다.
- 진단.
- 가중치 초기화.
- 학습률.
- 활성화 기능.
- 네트워크 토폴로지.
- 배치 및 에포크.
- 조정.
- 최적화 및 손실.
- 조기 중지.
구성의 성능을 잘 추정하기 위해 네트워크의 지정된 “구성”을 여러 번(3-10개 이상) 훈련해야 할 수 있습니다. 이것은 아마도 이 섹션에서 조정할 수 있는 모든 측면에 적용될 것입니다.
하이퍼 매개 변수 최적화에 대한 좋은 게시물은 다음을 참조하십시오.
1) 진단
성능이 더 이상 개선되지 않는 이유를 알면 더 나은 성능을 얻을 수 있습니다. 모델이 과적합 또는 과소 적합입니까? 정도의 차이는 있겠지만 둘 중 하나일 것입니다. 모델의 학습 동작에 대한 인사이트를 얻는 빠른 방법은 각 Epoch의 학습 및 검증 데이터 세트에서 모델을 평가하고 결과를 플로팅하는 것입니다.
- 훈련이 검증 세트보다 훨씬 낫다면 과적합일 수 있으며 정규화와 같은 기술을 사용할 수 있습니다.
- 훈련과 검증이 모두 낮으면 적합하지 않을 수 있으며 네트워크의 용량을 늘리고 더 많이 또는 더 오래 훈련할 수 있습니다.
- 훈련이 유효성 검사를 초과할 때 변곡점이 있는 경우 조기 중지를 사용할 수 있습니다.
이러한 플롯을 자주 만들고 성능 향상에 사용할 수 있는 다양한 기술에 대한 통찰력을 얻기 위해 연구합니다.
이러한 그림은 생성할 수 있는 가장 중요한 진단일 수 있습니다.
또 다른 유용한 진단은 네트워크가 옳고 그름을 얻는 관측치를 연구하는 것입니다. 일부 문제에서 이것은 시도해 볼 수 있는 것에 대한 아이디어를 줄 수 있습니다.
- 아마도 훈련하기 어려운 예제에 대한 더 많은 또는 증강 된 예제가 필요할 것입니다.
- 모델링하기 쉬운 학습 데이터 세트의 큰 샘플을 제거할 수 있습니다.
- 아마도 입력 공간의 다른 명확한 영역에 초점을 맞춘 특수 모델을 사용할 수 있습니다.
관련
2) 가중치 초기화
경험 법칙은 다음과 같습니다.
작은 난수를 사용하여 초기화합니다.
실제로, 그것은 여전히 충분할 것입니다. 그러나 네트워크에 가장 적합합니까? 다른 활성화 기능에 대한 휴리스틱도 있지만 실제로는 큰 차이를 본 기억이 없습니다. 네트워크를 고정하고 각 초기화 체계를 시도하십시오. 가중치는 찾으려는 모델의 실제 매개 변수입니다. 좋은 성능을 제공하는 많은 가중치 세트가 있지만 더 나은 성능을 원합니다.
- 제공되는 모든 다른 초기화 방법을 시도하고 다른 모든 방법이 일정하게 유지되는 것이 더 나은지 확인하십시오.
- 오토인코더와 같은 비지도 방법으로 사전 학습을 시도해 보십시오.
- 기존 모델을 가져와서 문제에 대한 새 입력 및 출력 계층을 다시 학습해 보세요(전이 학습).
가중치 초기화 방법을 변경하는 것은 활성화 기능 및 최적화 기능과 밀접한 관련이 있음을 기억하십시오.
관련
3) 학습률
학습률을 조정하면 종종 보상이 있습니다. 다음은 탐색할 몇 가지 아이디어입니다.
- 매우 크고 매우 작은 학습률로 실험합니다.
- 그리드는 문헌에서 일반적인 학습률 값을 검색하고 네트워크를 얼마나 멀리 밀어낼 수 있는지 확인합니다.
- Epoch에 걸쳐 감소하는 학습률을 시도하십시오.
- 고정된 모든 Epoch 수를 백분율로 떨어뜨리는 학습률을 시도해 보십시오.
- 모멘텀 용어를 추가한 다음 그리드 검색 학습률과 모멘텀을 함께 추가해 보세요.
더 큰 네트워크는 더 많은 훈련이 필요하며 그 반대의 경우도 마찬가지입니다. 더 많은 뉴런 또는 더 많은 레이어를 추가하면 학습률이 높아집니다. 학습률은 교육 에포크 수, 배치 크기및 최적화 방법과 결합됩니다.
관련:
4) 활성화 기능
아마도 정류기 활성화 기능을 사용해야 할 것입니다. 그들은 단지 더 잘 작동합니다. 그 전에는 시그모이드와 탄이었고, 그 다음에는 출력 레이어에서 소프트맥스, 선형 또는 시그모이드였습니다. 당신이 스스로 하고 있는 일을 알지 못한다면 그 이상을 시도하지 않는 것이 좋습니다. 세 가지를 모두 시도하고 함수의 범위를 충족하도록 데이터를 다시 스케일링하십시오. 분명히 출력값의 형식에 적합한 전달 함수를 선택하고 싶지만 다른 표현을 탐색하는 것을 고려하십시오.
예를 들어, 회귀 문제에 대해 이진 분류에 대한 시그모이드를 선형으로 전환한 다음, 출력값을 사후 처리합니다. 손실 함수를 더 적절한 것으로 변경해야 할 수도 있습니다. 이러한 라인을 따라 더 많은 아이디어를 보려면 데이터 변환 섹션을 참조하십시오.
관련:
5) 네트워크 토폴로지
네트워크 구조의 변화는 성과를 거둘 것입니다. 얼마나 많은 레이어와 얼마나 많은 뉴런이 필요합니까? 아무도 모릅니다. 문제에 대한 적절한 구성을 찾기 위해 실험을 반복해야 합니다.
- 많은 뉴런 (와이드)이있는 하나의 숨겨진 레이어를 사용해보십시오.
- 계층당 뉴런이 적은 심층 신경망(deep)을 사용해 보십시오.
- 위의 조합을 시도하십시오.
- 당신과 비슷한 문제에 대한 최근 논문의 아키텍처를 사용해보십시오.
- 토폴로지 패턴 (팬 아웃 한 다음 in)과 책과 논문의 경험 법칙 (아래 링크 참조)을 시도하십시오.
어렵습니다. 더 큰 네트워크는 더 큰 표현 기능을 가지고 있으며 아마도 필요할 것입니다. 더 많은 레이어는 데이터에서 학습한 추상 피처의 계층적 재구성을 위한 더 많은 기회를 제공합니다. 어쩌면 당신은 그것을 필요로 합니다. 후기 네트워크는 Epoch와 학습률 모두에서 더 많은 훈련이 필요합니다. 그에 따라 조정하십시오.
관련:
이 링크는 당신에게 시도 할 것들에 대한 많은 아이디어를 줄 것입니다, 그들은 나를 위해 잘합니다.
6) 배치 및 에포크
배치 크기는 기울기와 가중치 업데이트 빈도를 정의합니다. Epoch는 배치별로 네트워크에 노출되는 전체 훈련 데이터입니다. 다양한배치 크기와 Epoch 수를 실험해 보셨습니까? 위에서 우리는 학습률, 네트워크 크기 및 에포크 간의 관계에 대해 언급했습니다. Epoch 크기가 크고 훈련 Epoch가 많은 작은 배치 크기는 최신 딥 러닝 구현에서 일반적입니다. 이것은 귀하의 문제와 관련이 있을 수도 있고 그렇지 않을 수도 있습니다. 증거를 수집하고 확인하십시오.
- 훈련 데이터 크기와 동일한 배치 크기, 메모리에 따라 (배치 학습)를 시도하십시오.
- 배치 크기 1을 시도하십시오 (온라인 학습).
- 다양한 미니 배치 크기(8, 16, 32, …)의 그리드 검색을 시도합니다.
- 몇 개의 에포크와 많은 에포크 동안 훈련을 시도하십시오.
거의 무한한 수의 Epoch를 고려하고 지금까지 본 최고의 성능 모델을 캡처하기 위해 체크 포인트를 설정하고, 이에 대한 자세한 내용은 아래를 참조하십시오. 일부 네트워크 아키텍처는 다른 아키텍처보다 일괄 처리 크기에 더 민감합니다. 다층 퍼셉트론은 종종 배치 크기에 강하지 만 LSTM과 CNN은 매우 민감하지만 이는 일화 일뿐입니다.
관련
7) 정규화
정규화는 학습 데이터의 과적합을 억제하는 좋은 방법입니다. 새로운 정규화 기술은 드롭 아웃입니다.
드롭아웃은 훈련 중에 무작위로 뉴런을 건너뛰어 레이어의 다른 사람들이 여유를 선택하도록 합니다. 간단하고 효과적입니다. 드롭아웃으로 시작합니다.
- 그리드는 다른 드롭아웃 비율을 검색합니다.
- 입력, 숨겨진 레이어 및 출력 레이어에서 드롭아웃을 실험해 보십시오.
드롭 커넥트와 같이 플레이할 수도 있는 드롭아웃 아이디어에 대한 확장 기능이 있습니다.
또한 다음과 같은 다른 전통적인 신경망 정규화 기술을 고려하십시오.
- 큰 무게를 처벌하기 위해 무게 감소.
- 활성화 제약 조건: 대규모 활성화에 불이익을 줍니다.
처벌받을 수 있는 다양한 측면과 적용할 수 있는 다양한 유형의 처벌(L1, L2, 둘 다)을 실험해 보십시오.
관련:
8) 최적화 및 손실
예전에는 확률적 경사하강법이었지만 지금은 수많은 옵티마이저가 있습니다. 다양한 최적화 절차를 실험해 보셨습니까? 확률적 경사하강법이 기본값입니다. 다양한 학습률, 모멘텀 및 학습률 일정으로 먼저 최대한 활용하십시오. 많은 고급 최적화 방법은 더 많은 매개 변수, 더 많은 복잡성 및 더 빠른 수렴을 제공합니다. 이것은 문제에 따라 좋고 나쁩니다. 주어진 방법을 최대한 활용하려면 각 매개 변수의 의미를 파악한 다음 문제에 대해 다른 값을 그리드 검색해야 합니다. 힘들다. 시간이 많이 걸립니다. 더 새롭고 인기있는 방법이 훨씬 빠르게 수렴 할 수 있으며 주어진 네트워크 토폴로지의 기능에 대한 빠른 아이디어를 제공 할 수 있음을 발견했습니다.
- 아담
- RMSprop
더 전통적인 알고리즘 (Levenberg-Marquardt) 및 덜 전통적인 알고리즘 (유전 알고리즘)과 같은 다른 최적화 알고리즘을 탐색 할 수도 있습니다. 다른 방법은 SGD와 친구들이 다듬을 수 있는 좋은 출발점이 될 수 있습니다.
최적화할 손실 함수는 해결하려는 문제와 밀접한 관련이 있을 수 있습니다.
그럼에도 불구하고 종종 약간의 여유가 있으며 (회귀를위한 MSE 및 MAE 등) 문제에 대한 손실 함수를 교체하여 약간의 충돌을 얻을 수 있습니다. 이것 역시 입력 데이터의 규모 및 사용 중인 활성화 기능과 관련이 있을 수 있습니다.
관련:
9) 조기 정지
성능이 저하되기 시작하면 학습을 중지할 수 있습니다.
이렇게 하면 많은 시간을 절약할 수 있으며 보다 정교한 리샘플링 방법을 사용하여 모델의 성능을 평가할 수도 있습니다.
조기 중지는 학습 데이터의 과적합을 방지하기 위한 정규화 유형이며, 각 Epoch에서 학습 및 보류 유효성 검사 데이터 세트에서 모델의 성능을 모니터링해야 합니다.
검증 데이터 세트의 성능이 저하되기 시작하면 학습이 중지될 수 있습니다.
또한 체크포인트를 설정하여 이 조건이 충족되는 경우(정확도 손실 측정) 모델을 저장하고 모델이 계속 학습하도록 할 수 있습니다.
체크포인팅을 사용하면 정지 없이 조기 정지를 수행할 수 있으므로 실행이 끝날 때 선택할 수 있는 몇 가지 모델을 제공합니다.
관련:
4. 앙상블로 성능 향상
여러 모델의 예측을 결합할 수 있습니다. 알고리즘 튜닝 후 개선해야 할 다음 큰 영역입니다.
사실, 고도로 조정된(그리고 취약한) 여러 모델이 아닌 여러 “충분히 좋은” 모델의 예측을 결합하여 좋은 성능을 얻을 수 있는 경우가 많습니다.
고려할 수 있는 앙상블의 세 가지 일반적인 영역을 살펴보겠습니다.
- 모델 결합.
- 뷰 결합.
- 스태킹.
1) 모델 결합
모델을 선택하지 말고 결합하십시오.
각각 문제에 대해 잘 수행되는 여러 다른 딥러닝 모델이 있는 경우 평균을 취하여 예측을 결합합니다.
모델이 다를수록 좋습니다. 예를 들어 매우 다른 네트워크 토폴로지나 다른 기술을 사용할 수 있습니다.
앙상블 예측은 각 모델이 능숙하지만 다른 방식으로 진행되는 경우 더 강력합니다.
또는 반대 위치를 실험 할 수 있습니다.
네트워크를 훈련시킬 때마다 다른 가중치로 초기화하고 다른 최종 가중치 세트로 수렴합니다. 이 과정을 여러 번 반복하여 많은 신경망을 만든 다음 이러한 신경망의 예측을 결합합니다.
그들의 예측은 높은 상관 관계가 있지만 예측하기 어려운 패턴에 약간의 충돌을 줄 수 있습니다.
관련:
2) 뷰 결합
위와 같이 각 네트워크를 다른 관점이나 문제 프레이밍으로 훈련시킵니다.
다시 말하지만, 목표는 능숙하지만 다른 방식으로 모델을 갖는 것입니다 (예 : 상관되지 않은 예측).
아이디어에 대한 데이터 섹션에서 위에 나열된 매우 다양한 크기 조정 및 변환 기술을 사용할 수 있습니다.
서로 다른 모델을 학습하는 데 사용되는 문제의 변환과 프레이밍이 다양할수록 결과가 향상될 가능성이 높아집니다.
간단한 예측 평균을 사용하는 것이 좋은 시작이 될 것입니다.
3) 스태킹
여러 모델의 예측을 가장 잘 결합하는 방법도 알아볼 수 있습니다.
이를 누적 일반화 또는 줄여서 쌓기라고 합니다.
종종 다른 모델의 예측에 가중치를 부여하는 방법을 학습하는 정규화된 회귀와 같은 간단한 선형 방법을 사용하여 예측 평균보다 더 나은 결과를 얻을 수 있습니다.
기준선은 하위 모델의 예측 평균을 사용하여 재사용하지만 모델의 학습된 가중치로 성능을 높입니다.
결론
좋은 자료는 많지만 모든 아이디어를 하나로 묶는 것은 거의 없습니다.
더 깊이 파고들고 싶다면 흥미로울 수 있는 몇 가지 리소스와 관련 게시물을 나열하겠습니다.
- 신경망 FAQ
- Keras를 사용하여 Python에서 딥 러닝 모델에 대한 하이퍼파라미터 검색 그리드 화 방법
- 심층 신경망의 팁/트릭을 알아야 합니다.
- 심층 신경망으로 검증 정확도를 높이는 방법은 무엇입니까?
좋은 리소스를 알고 있습니까? 알려주세요, 코멘트를 남겨주세요.
압도(overwhelming) 처리
이것은 큰 게시물이며 우리는 많은 근거를 다루었습니다.
모든 것을 할 필요는 없습니다. 성능을 높이려면 좋은 아이디어 하나만 있으면됩니다.
압도를 처리하는 방법은 다음과 같습니다.
하나의 그룹 선택
- 데이터.
- 알고리즘.
- 조율.
- 앙상블.
- 그룹에서 하나의 방법을 선택합니다.
- 선택한 방법 중 한 가지를 선택하십시오.
- 결과를 비교하고 개선이 있었는지 유지하십시오.
- 위 과정을 반복하십시오.