이 섹션에서는 시작 부분에서 다음을 선택하는 방법을 설명합니다. ML 프로젝트:
- 모델 아키텍처는
- 옵티마이저
- 배치 크기
- 초기 구성을
가정
이 섹션의 권장사항은 다음을 전제로 합니다.
- 이미 문제를 공식화했습니다. 학습 데이터를 어느 정도 준비했습니다
- 학습 및 테스트 파이프라인을 이미 설정했습니다.
- 이미 대표적인 측정항목을 선택하고 구현했습니다. 최대한 정확하게 예측할 수 있습니다.
앞의 기본 요건을 모두 충족했다면 이제 모델 아키텍처와 학습 구성에 집중할 수 있습니다
모델 아키텍처 선택
다음 정의부터 시작해 보겠습니다.
- 모델 아키텍처는 예측을 생성하기 위한 시스템입니다. 모델 아키텍처에는 입력 데이터 변환을 위한 프레임워크가 포함되어 있습니다. 포함하지는 않지만 parameter 값에 따라 달라집니다. 예를 들어 노드 10개, 노드 5개, 노드 3개로 구성된 히든 레이어 3개가 있는 신경망 모델 아키텍처입니다
- 모델은 모델 아키텍처에 모든 요소의 특정 값을 매개변수입니다. 예를 들어 모델은 앞서 설명한 신경망으로 모델 아키텍처의 정의에 대한 설명뿐 아니라 가중치와 편향을 정의할 수 있습니다
- 모델 계열은 모델 아키텍처를 구성하기 위한 템플릿입니다. 초매개변수
모델 아키텍처를 선택한다는 것은 실제로 다양한 모델 아키텍처와 모델 초매개변수의 각 설정에 대해 하나씩).
가능하면 무언가를 해결하는 문서화된 코드베이스 찾기 현재 문제에 최대한 가깝게 접근합니다 그런 다음 해당 모델을 출발점입니다.
옵티마이저 선택
'최고의' 옵티마이저가 없음 모든 유형의 머신러닝 문제에 모델 아키텍처를 살펴보겠습니다 옵티마이저의 성능을 비교하기만 해도 어렵습니다 📊은 널리 사용되는 옵티마이저와 특히 새 프로젝트를 시작할 때 유용합니다
문제 유형에 가장 많이 사용되는 옵티마이저를 선택하는 것이 좋습니다. 확인할 수 있습니다 다음과 같은 확립된 옵티마이저를 사용하는 것이 좋습니다.
- SGD, 모멘텀 Nesterov 변형을 사용하는 것이 좋습니다.
- Adam 및 NAdam이 있습니다. SGD에 진입하고 있습니다. Adam은 조정 가능한 인수가 4개 있고 모두 중요할 수 있습니다! 자세한 내용은 Adam의 초매개변수는 어떻게 어떻게 해야 할까요?
선택한 옵티마이저의 모든 인수에 주의합니다. 초매개변수가 더 많은 옵티마이저에는 일반적으로 더 많은 조정 작업이 필요합니다. 특히 프로젝트 초반에 많은 작업을 하는 경우 다양한 초매개변수 중 최적값을 옵티마이저 인수를 있습니다. 따라서 다음 접근 방식을 사용하는 것이 좋습니다.
- 프로젝트 시작 시 조정 가능한 함수가 많지 않은 옵티마이저를
초매개변수를 조정합니다 예를 들면 다음과 같습니다.
<ph type="x-smartling-placeholder">
- </ph>
- 모멘텀이 고정된 SGD입니다.
- 수정된 Epsilon, Beta1, Beta2를 가진 Adam
- 프로젝트의 후반 단계에서 작업을 수행하는 보다 일반적인 옵티마이저로 기본값으로 수정하는 대신 더 많은 초매개변수를 조정합니다.
배치 크기 선택
요약: 배치 크기가 학습 속도를 제어합니다. 배치 크기를 사용하지 않고 검증 세트 성능을 직접 조정할 수 있습니다
배치 크기에 따라 학습 시간과 컴퓨팅 리소스가 크게 결정됨 있습니다 배치 크기를 늘리면 학습 시간이 줄어들지만 기능:
- 고정된 시간 내에 초매개변수를 보다 철저히 조정할 수 있음 더 나은 최종 모델을 생성할 수 있습니다.
- 개발 주기의 지연을 줄여 새로운 아이디어 실현 더 자주 테스트하게 됩니다
배치 크기를 늘리면 리소스 소비를 줄이거나 늘릴 수 있습니다. 리소스 소비를 변경하지 않고 그대로 유지할 수 있습니다
배치 크기를 검증을 위해 조정 가능한 초매개변수로 취급하지 않음 성능을 설정합니다. 만약 다음 조건이 충족되는 경우 모델 성능을 배치 크기:
- 모든 옵티마이저 초매개변수가 잘 조정되어 있습니다.
- 정규화로 충분하고 잘 조정되었습니다.
- 학습 단계 수로 충분합니다.
배치 크기를 사용해도 동일한 최종 성능을 얻을 수 있어야 합니다. (Shallue 외 2018년 및 직접 개선할 수 있도록 배치 크기를 조정하면 안 되는 이유 어떻게 해야 할까요?)
가능한 배치 크기 결정 및 학습 처리량 예측
주어진 모델과 옵티마이저에 대해 사용 가능한 하드웨어는 일반적으로 사용할 수 있습니다 제한 요소는 일반적으로 가속기 메모리를 예로 들 수 있습니다 하지만 안타깝게도 실행 또는 최소한 컴파일하지 않고도 메모리에 맞을 것입니다. 참여할 수 있습니다 가장 쉬운 솔루션은 일반적으로 학습 작업을 실행하는 것입니다. 작은 크기의 경우 여러 배치 크기 (예: 2의 거듭제곱 증가)로 작업 중 하나가 사용 가능한 메모리를 초과할 때까지의 단계 수를 나타냅니다. 대상 학습한 다음 각 배치 크기에 대한 신뢰성 높은 추정치를 얻을 수 있도록 학습 처리량:
학습 처리량 = 초당 처리되는 예시 수
또는 단계당 시간도 마찬가지입니다.
단계당 시간 = 배치 크기 / 학습 처리량
가속기가 아직 포화되지 않은 경우 배치 크기가 두 배가 되면 학습 처리량도 두 배 (또는 적어도 두 배 이상)가 되어야 합니다. 마찬가지로 걸음당 시간은 일정하거나 적어도 거의 상수)를 제공합니다. 이 경우에 해당되지 않으면 학습 파이프라인에 I/O 또는 동기화와 같은 병목 현상이 있는 경우 분리할 수 있습니다 병목 현상 진단 및 수정 고려 계속하기 전에
학습 처리량이 최대 배치 크기까지만 증가하는 경우 배치 크기를 최대 배치 크기까지만 고려합니다. 하드웨어가 더 큰 배치 크기를 지원합니다. 더 큰 배치 크기를 사용할 때의 모든 이점은 학습 처리량을 가정합니다. 증가하게 됩니다 그렇지 않은 경우 병목 현상을 해결하거나 더 작은 배치 크기를 사용하세요.
경사 누적은 하드웨어가 가능한 것보다 큰 배치 크기를 시뮬레이션 처리량상의 이점을 제공하지 않습니다. 해야 할 일 일반적으로 적용된 작업에서 경사 축적을 피합니다.
모델을 변경하거나 모델을 변경할 때마다 이 단계를 반복해야 할 수도 있습니다. 옵티마이저입니다. 예를 들어, 다른 모델 아키텍처는 더 큰 배치 크기를 메모리에 맞출 수 있습니다
학습 시간을 최소화하기 위해 배치 크기 선택
학습 시간의 정의는 다음과 같습니다.
- 학습 시간 = (단계당 시간) x (총 단계 수)
단계당 시간이 거의 일정하다고 생각할 수 있습니다. 할 수 있습니다. 이는 다음과 같은 경우에 해당됩니다.
- 병렬 계산의 오버헤드는 없습니다.
- 모든 학습 병목 현상은 진단과 수정이 완료되었습니다. (항목을 식별하는 방법은 이전 섹션을 참고하세요.) 학습 병목 현상입니다. 실제로는 최소한 오버헤드를 줄일 수 있습니다
배치 크기가 증가함에 따라 모든 예산을 재조정하면 일반적으로 고정된 실적 목표가 감소합니다. 초매개변수를 조정하는 것이 좋습니다 (자세한 내용은 샬루 외 2018 참고) 예를 들어 배치 크기를 두 배로 늘리면 수행할 수 있습니다 이 관계를 완벽한 확장이라고 하며 중요 배치 크기까지 모든 배치 크기를 유지할 수 있습니다.
중요한 배치 크기 이상으로 배치 크기를 늘리면 줄어들 수 있습니다 즉, 결국 배치 크기를 늘리면 더 이상 학습 단계 수를 줄이지 않고 증가시키지 않습니다. 따라서 학습 시간을 최소화하는 배치 크기는 일반적으로 여전히 학습 단계 수를 줄이는 최대 배치 크기 필요합니다. 이 배치 크기는 데이터 세트, 모델, 옵티마이저와 옵티마이저의 계산 방법에 대해 실험적으로 찾는 것이 매우 중요합니다. 🤖
배치 크기를 비교할 때는 다음 사항의 차이점에 유의하세요.
- 예산 예시 또는 에포크 예산: 교육 예제 프레젠테이션의 개수 수정
- 단계 예산—고정된 수로 모든 실험을 실행합니다. 학습 단계입니다
배치 크기를 에포크 예산과 비교하면 완벽한 프로브가 될 뿐입니다. 더 큰 배치 크기가 제공되더라도 필요한 학습 단계 수를 줄여 속도를 유의미하게 높일 수 있습니다. 일반적으로 사용 가능한 하드웨어에서 지원하는 가장 큰 배치 크기는 중요 배치 크기보다 작습니다. 따라서 적절한 규칙은 가장 좋은 방법은 큰 배치 크기를 사용하는 것은 무의미합니다. 학습 시간을 늘릴 수 있습니다
배치 크기를 선택하여 리소스 소비 최소화
배치 크기 증가와 관련된 리소스 비용에는 두 가지 유형이 있습니다.
- 선불 비용. 예를 들어, 새 하드웨어를 구매하거나 학습 파이프라인을 사용하여 다중 GPU / 다중 TPU 학습을 구현합니다.
- 사용 비용. 예를 들어 팀의 리소스 예산에 대한 청구 클라우드 제공업체 청구, 전기 / 유지보수 비용
배치 크기를 늘리는 데 상당한 초기 비용이 드는 경우 프로젝트가 업데이트 될 때까지 배치 크기 증가를 미루는 것이 비용-편익 절충점을 평가하기가 더 쉽습니다 멀티 호스트 병렬 학습 프로그램을 구현하면 버그와 미묘한 문제 따라서 처음에는 간단한 살펴봤습니다 반면에 학습 시간은 많은 튜닝을 하는 것이 프로세스 초기에 매우 유용할 수 있습니다. 실험이 필요합니다
총사용 비용을 의미합니다. 여기에는 여러 개의 리소스 소비로 계산되며 다음과 같이 계산됩니다.
리소스 소비 = 단계당 리소스 소비 x 총 단계 수
배치 크기를 늘리면 일반적으로 총 단계 수가 줄어듭니다. 리소스 소비의 증가 또는 감소 여부는 다음에 따라 다릅니다. 다음과 같이 배치 크기에 따라 달라지는 단계당 소비량 변화
- 배치 크기를 늘리면 리소스 소비를 감소할 수 있습니다. 예를 들어 배치 크기가 더 큰 각 단계를 실행할 수 있는 경우 작은 배치 크기 (소형 배치만 포함)와 동일한 하드웨어에서 단계당 시간 증가) 리소스 증가 걸음당 소비량보다 평균 걸음 수의 단계를 거칩니다.
- 배치 크기를 늘려도 리소스 소비는 변경되지 않을 수 있습니다. 예를 들어 배치 크기를 2배로 늘리면 단계 수가 절반으로 줄어듭니다. 사용되는 GPU 수와 총 소비량을 두 배로 (GPU 시간 측면에서)은 변경되지 않습니다.
- 배치 크기를 늘리면 리소스 소비가 증가할 수 있습니다. 예를 들어 배치 크기를 늘리기 위해 업그레이드된 하드웨어가 필요한 경우 걸음당 소비의 증가가 단계 수
배치 크기를 변경하려면 대부분의 초매개변수를 다시 조정해야 합니다.
대부분의 초매개변수의 최적값은 배치 크기에 민감합니다. 따라서 배치 크기를 변경하려면 일반적으로 조정을 시작해야 합니다. 할 수 있습니다. 가장 밀접하게 상호 작용하는 초매개변수 큰 차이를 보이므로 각 특성을 개별적으로 조정하는 것이 가장 중요합니다. 는 다음과 같습니다.
- 옵티마이저 초매개변수 (예: 학습률 및 모멘텀)
- 정규화 초매개변수
프로젝트 시작 시 배치 크기를 선택할 때 이 점에 유의하세요. 나중에 다른 배치 크기로 전환해야 하는 경우에는 다른 초매개변수를 재조정하는 데 어렵고 시간이 오래 걸리며 비용이 많이 듭니다. 로 설정합니다.
배치 규범이 배치 크기와 상호작용하는 방식
배치 규범은 복잡하며 일반적으로 다른 배치를 사용해야 함 경사 계산보다 큰 크기여야 합니다. 자세한 내용은 일괄 정규화 구현 세부정보를 참고하세요.
초기 구성 선택
초매개변수 조정의 첫 번째 단계는 다음을 위한 시작점:
- 모델 구성 (예: 레이어 수)
- 옵티마이저 초매개변수 (예: 학습률)
- 학습 단계 수
이 초기 구성을 확인하려면 몇 가지를 수동으로 확인해야 합니다. 구성된 학습 실행과 시행착오를 살펴보았습니다
Google의 기본 원칙은 다음과 같습니다.
단순하고, 상대적으로 빠르며, 상대적으로 리소스 소비량이 적은 적합한 성능을 얻는 것이 좋습니다.
각 항목의 의미는 다음과 같습니다.
- 단순은 특수 문자와 같은 불필요한 파이프라인 기능을 아키텍처 트릭처럼 말이죠. 예를 들어 스테이트리스(Stateless) 컨테이너를 드롭아웃 정규화 드롭아웃 정규화를 사용하지 않는 경우)이 드롭아웃 정규화를 사용합니다.
- 합리적인 성능은 문제에 따라 다르지만, 최소한 합리적인 학습된 모델이 무작위 확률보다 훨씬 더 잘 수행됨 검증세트에 적용할 수 있습니다
빠르고 최소한의 소비량인 초기 구성 선택 초매개변수 조정을 훨씬 효율적으로 할 수 있습니다. 예를 들어 더 작은 모델로 시작해 보세요.
학습 단계 수를 선택할 때는 다음과 같은 긴장 사이의 균형을 맞추어야 합니다.
- 더 많은 단계를 학습하면 성능을 개선하고 초매개변수를 간소화할 수 있습니다. 있습니다. 자세한 내용은 샬루 외 2018)에 기반한 방법론을 조정했습니다.
- 반대로 학습 단계가 적을수록 학습이 실행될 때마다 더 적은 리소스를 사용하므로 자동으로 조정되므로 더 많은 실험을 동시에 실행할 수 있습니다. 또한 초기에 불필요하게 큰 보폭을 선택한 경우 나중에 프로젝트에서 변경하기 어려울 수 있습니다. 예를 들어 해당 단계의 학습률 일정을 조정하면 됩니다