2024. 5. 25. 15:59ㆍ스터디/24-1 스터디 _ 핸즈온 머신러닝(3판)
10. 케라스를 사용한 인공 신경망 소개
인공 신경망(artificial neural network)
-뇌에 있는 생물학적 뉴런의 네트워크에서 영감을 받은 머신러닝 모델
-생물학적 시스템에 국한되지 않기 위해 생물학적 비교를 버리면서 생물학적 뉴런(신경세포)에서 멀어지고 있음
-딥러닝의 핵심
10.1 인공 신경망
1. 인공 신경망의 발달 과정
: 각각의 단계 사이에 긴 침체기가 있었다. 현재는 부흥 중이다.
(1) 최초의 인공 신경망 구조
-1943년, 신경생리학자 워런 매컬러와 수학자 윌터 피츠가 논문에서 소개
-명제 논리를 사용해 동물 뇌의 생물학적 뉴런이 복잡한 계산을 위해 어떻게 상호 작용하는지에 관한 간단한 계산 모델
(2)
1980년대 초, 새로운 네트워크 구조와 더 나은 훈련 기법의 등장 -> 연결주의(신경망에 대한 연구)에 대한 관심 증가
(3)
1990년대, 머신러닝 기술 개발
(4) 현재의 인공 신경망
: 이전과는 다른 흐름이다. 그 이유는,
-신경망을 훈련하기 위한 데이터의 증가 -> 인공 신경망은 규모가 크고 복잡한 문제에서 다른 머신러닝 기법보다 좋은 성능을 냄
-컴퓨터 하드웨어의 발전 -> 납득할만한 시간에 대규모 신경망 훈련 가능
-훈련 알고리즘 향상
-일부 인공 신경망의 이론상 제한이 실전에서는 문제가 되지 않음
(문제가 될거라고 예측했으나, 큰 문제가 되지 않거나 전혀 문제가 되지 않음)
-인공 신경망에 대한 투자와 관심 증가
10.1.1 생물학적 뉴런
-동물의 뉴런
-핵을 포함하는 세포체
-수상돌기 : 나뭇자기 모양의 돌기
-축삭돌기
: 길이가 긴 돌기(길이는 매우 다양)
: 끝이 축삭끝가지 라는 여러 가지로 나뉘고,
축삭끝가지의 끝은 시냅스 말단이라는 미세 구조이며 다른 뉴런의 수상돌기나 세포체에 연결된다.
-활동전위라는 짧은 전기 자극 발생
-> 신호는 축삭돌기를 따라 이동
-> 시냅스의 신경 전달 물질이라는 화학적 신호 생성
-수십억 개의 뉴런으로 구성된 거대한 네트워크로 조직(네트워크끼리도 연결)
-뉴런들이 연속된 층으로 조직되기도 함(대뇌피질의 뉴런)
10.1.2 뉴런을 사용한 논리 연산
인공 뉴런(artificial neuron)
-하나 이상의 이진(on/off) 입력과 하나의 이진 출력을 가짐
-입력이 일정 개수만큼 활성화 되었을 때 출력을 내보냄
-매컬러와 피츠가 제한한 신경망 모델에서 비롯한 인공 뉴런
-인공 뉴런의 네트워크를 만들어 논리 연산 수행 (논리 명제 계산) 가능
10.1.3 퍼셉트론
1. 퍼셉트론
(1)1957년, 프랑크 로젠블라트가 제안
(2)가장 간단한 인공 신경망 구조
(3)입출력이 이진값(on/off)이 아닌 어떤 숫자이고, 각각의 입력 연결은 가중치와 연관 되어있음
(4)TLU 또는 LTU라 불리는 인공 뉴런 기반
2. TLU
(1) 입력의 선형 함수를 계산 -> 결과에 계단 함수 적용
(로지스틱 함수 대신 스텝 함수를 사용한다는 점이 로지스틱 회귀와의 차이)
(2) 모델 파라미터 : 입력 가중치(w), 편향(b)
(3) 헤비사이드 계단 함수 : 퍼셉트론에서 가장 널리 사용되는 계산 함수
(4) 간단한 선형 이진 분류 문제에 사용될 수 있음
-입력의 선형 함수 계산 -> 결과>임곗값 -> 양성 클래스 출력
-입력의 선형 함수 계산 -> 결과<임곗값 -> 음성 클래스 출력
물론, 다중 레이블 분류나 다중 분류도 가능함
(5) 하나의 층 안에 놓인 하나 이상의 TLU로 구성되고,
각각의 TLU는 모든 입력에 연결됨
이런 걸 완전 연결 층(밀집 층) 이라고 함
(6) 입력은 입력 층을 구성, TLU의 층을 입력 층이라고 함(TLU 층이 최종 출력을 생성하기 때문)
(7) 퍼셉트론의 훈련(헤브의 규칙)
-헤브의 규칙 : 두 뉴런이 동시에 활성화 될 때마다 이들 사이의 연결 가중치는 증가함(생물학적 뉴런이 다른 뉴런을 활성화시킬 때 이 두 뉴런의 연결은 더 강해짐)
-네트워크가 예측할 때 만드는 오차를 반영하도록 헤브의 규칙을 변형하여 훈련(오차가 감소되도록 연결 강화, 잘못된 예측을 하는 모든 출력 뉴런에 대해 올바른 예측을 만들 수 있도록 입력에 연결된 가중치 강화)
-한 번에 한 개의 샘플 주입 -> 각 샘플에 대한 예측 생성
(8) 퍼셉트론 수렴 이론(perceptron convergence)
-훈련 샘플이 선형적으로 구분될 수 있다면 해당 할고리즘은 정답에 수렴함
-퍼셉트론 학습 알고리즘은, 확률적 경사 하강법과 유사
(perceptron 클래스는 SGDClassi-fier 의 일종임. 특정 매개변수)
(9) 퍼셉트론의 약점과 보완
-약점 : 일부 간단한 문제를 풀 수 없음. 실용적인 애플리케이션 부족.
-보완 : 퍼셉트론을 여러 개 쌓아올리기 -> 제약(약점) 줄이기
이런 인공 신명망이 다층 퍼셉트론(MLP)
10.1.4 다층 퍼셉트론과 역전파
1. 다층 퍼셉트론의 구조
-입력 층 하나, 은닉층이라 불리는 하나 이상의 TUL층, 출력층
-하위 층(입력 층과 가장 가까운 층), 상위 층(출력에 가까운 층)
2. 심층 신경망(DNN)
-은닉 층을 여러 개 쌓아 올린 인공 신경망
(딥러닝은 심층 신경망을 연구하는 분야)
3. 역전파
(1) 후진 모드 자동 미분
: 모든 그레이디언트를 자동으로 효율적으로 계산하는 기법
: 네트워크를 두 번만 통과(전진, 후진)하면 모든 단일 모델 파라미터에 대한 신경망 오차의 그레이디언트를 계산할 수 있음
(신경망의 오차를 줄이기 위해 각 연결 가중치와 편향을 어떻게 조정해야 하는지 알아낼 수 있음)
(2) 역전파
-> 후진 모드 자동 미분 실행
-> 그레이디언트를 이용하여 경사 하강법 단계 수행
-> 두 과정 반복
-> 신경망의 오차 감소
-> 최솟값에 도달
이런 식으로,
후진 모드 자동 미분과 경사 하강법을 결합한 것을 역전파라고 함.
-신경망과 모든 종류의 계산 그래프에 적용 가능
(3) 역전파의 작동방식
Step1) 정방향 계산
: 역전파 알고리즘의 미니배치에 대한 예측 만들기
-> 오차 측정하기
Step2) 역방향 계산 : 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도를 측정
Step3) 경사 하강법 : 오차가 감소하도록 가중치와 편향 조정
-은닉 층의 연결 가중치를 랜덤하게 초기화 하는 것이 중요
-자세한 과정
한번에 하나의 미니배치씩 진행해서 전체 훈련 세트를 처리
(이 과정 여러 번 반복해주기. 이때 각 반복을 에포크 라고 함)
-> 각 미니배치는 입력 층을 통해 네트워크로 들어감
-> 알고리즘이 미니배치에 있는 모든 샘플에 대해 첫 번째 은닉 층에 있는 모든 뉴런의 출력을 계산함
-> 마지막 층인 출력 층의 출력을 계산할 때까지 위의 과정 계속하기
(이러한 것을 정방향 계산 이라고 함)
-> 출력 층의 출력까지 계산한 후, 알고리즘이 네트워크의 출력 오차 측정
-> 각 출력의 오차와 출력 층의 각 연결이 이 오차에 얼마나 기여했는지를 계산
-> 이전 층의 연결 가중치가 이 오차의 기여 정도에 얼마나 기여했는지도 측정(연쇄 법칙을 사용하여)
-> 입력 층에 도달할 때까지 ‘역방향’으로 진행(오차 그레이디언트를 거꾸로 전파함으로써 효율적으로 네트워크에 있는 모든 연결 가중치와 편향에 대한 오파 그레이디언트 측정)
-> 알고리즘의 경사 하강법 수행
-> 오차 그레이디언트 사용해서 네트워크에 있는 모든 연결 가중치 수정
10.1.5 회귀를 위한 다층 퍼셉트론(p. 384)
1. 다층 퍼셉트론은 회귀 작업에 사용될 수 있음
2. 하나의 값 예측에는 하나의 출력 뉴런만 필요
3. 다변량 회귀(동시에 여러값 예측)에서,
하나의 출력 차원마다 하나의 출력 뉴런이 필요
4. 후버 손실 : 평균 제곱 오차와 평균 절대 오차를 조합한 것
-오차 > 임곗값 : 선형 함수 : 평균 제곱 오차보다 이상치에 덜 민감
-오차 < 임곗값 : 이차 함수 : 평균 절대 오차보다 더 빠르고 정확하게 수렴
10.1.6 분류를 위한 다층 퍼셉트론(p. 386)
1. 다층 퍼셉트론은 분류 작업에 사용될 수 있음
2. 이진 분류 시, 시그모이드 활성화 함수를 가진 하나의 출력 뉴런만 필요
3.
출력은 0과 1 사이의 실수이고 양성 클래스에 대한 예측 확률로 해석 가능
1 - 양성 클래스의 예측 확률 = 음성 클래스에 대한 예측 확률
4. 다중 레이블 이진 분류 : 다층 퍼셉트론으로 쉽게 처리 가능
5. 다중 분류 :
-각 샘플이 3개 이상의 클래스 중 한 클래스에만 속할 수 있다면, 클래스마다 하나의 출력 뉴런이 필요.
-출력 층에는 소프트맥스 활성화 함수 사용해야함
-확률 분포 예측이 필요하므로 손실 함수는 크로스 엔트로피 손실 선택하기
10.2 케라스로 다층 퍼셉트론 구현하기
케라스 : 모든 종류의 신경망을 손쉽게 만들고 훈련, 평가, 실행할 수 있는 텐서플로의 고수준 딥러닝 API
10.2.1~4 : 케라스 모델을 만드는 여러 방법들에 대한 설명
10.2.1 시퀀셜 API로이미지 분류기 만들기
1. 케라스로 데이터셋 적재하기
(1) 뒤섞인 채로 제공된 훈련 세트와 테스트 세트로 분할 되어있는 데이터 셋을 검증 세트를 위해 훈련 세트의 마지막 일부 떼어두기
(2) 각 이미지 : 28X28 배열, 픽셀 강도 : 정수(0에서 255까지)로 표현됨
(3) 픽셀 강도를 255.0으로 나누어 0~1사이 범위로 조정(자동으로 실수로 변환)
2. 시퀀셜 API로 모델 만들기
(1) 신경망 만들 때, 모델의 각 층은 고유한 이름을 가져야함
(2) 그 방식은 생성자의 name 매개변수를 사용하여 명시적으로 층 이름을 지정하거나, 케라스가 자동으로 층 이름을 지정하도록 할 수 있음
(3) 후자
-더 간단
-층의 클래스 이름을 스네이크 표기법으로 변환함
-케라스는 인덱스를 추가하여 모델 사이에서도 이름이 전역적으로 고유하도록 보장함(모델 병합 시, 이름의 충돌이 없음)
3. 모델 컴파일
: 모델을 만든 후, 손실 함수와 옵티마이저 지정
4. 모델 훈련과 평가
(1) 입력 특성, 타깃 클래스, 훈련할 에포크 횟수, 검증 세트(선택사항) 전달
(2) 케라스는 에포크가 끝날 때마다 검증 세트를 사용해 손실과 추가적인 측정 지표를 계산함(모델이 얼마나 잘 수행되는지 확인)
(3) 훈련 세트 성능이 검증 세트모다 월등히 높다면 모델이 훈련 세트에 과대 적합되었거나, 버그임
(4) 훈련 에포크마다 케라스는 진행 표시줄 왼쪽에 처리한 미니배치 개수 출력
(5) 진행 표시줄 다음에는 샘플마다 걸린 평균 훈련 시간, 훈련 세트와 검증 세트에 대한 손실과 정확도 출력
(6) 훈련 세트 편중 발생 시, class_weight 매개변수 지정해서 적게 등장하는 클래스는 높은 가중치 부여, 많이 등장하는 클래스는 낮은 가중치 부여(그러면 케라스가 손실 계산할 때 이 가중치 사용하게 되므로 해소)
(7) 훈련 -> 훈련 세트의 성능이 검증 세트의 성능을 앞지름
(8) 모델 성능이 만족스럽지 않으면, 처음으로 되돌아가서 하이퍼파라미터 튜닝해야됨(학습률, 옵티마이저 순으로 체크, 층 개수, 층에 있는 뉴런 개수, 은닉 층이 사용하는 활성화 함수와 같은 모델의 하이퍼 파라미터 체크)
(9) 모델 성능이 만족스러우면, 배포 이전 테스트 세트로 모델을 평가하여 일반화 오차를 추정해야함
(10) 주의할 건, 하이퍼파라미터를 검증 세트에서 튜닝했기 때문에 검증 세트보다 테스트 세트에서 성능이 낮은 것이 일반적임. 그러므로 테스트 세트에서 하이퍼파라미터를 튜닝하는 건 섣부름. 일반화 오차가 작게 추정될 위험이 있음.
5. 모델로 예측 만들기
: 새로운 샘플에 대한 예측 만들기
10.2.2 시퀀셜 API로 회귀용 다층 퍼셉트론 만들기
1. 시퀀셜 API는 깔끔하고 간단함
2. Sequential 모델이 널리 사용되지만, 입출력이 여러 개거나 복잡한 네트워크 토폴로지를 갖는 신경망을 만들어야하는 경우에 대비하여 케라스는 함수형 API를 제공함
10.2.3 함수형 API로 복잡한 모델 만들기
1. 와이드&딥 신경망 : 순차적이지 않은 신경망
(1) 입력의 일부 또는 전체가 출력 층에 바로 연결됨
(2) 신경망이 (깊에 쌓은 층을 사용한) 복잡한 패턴과 (짧은 경로를 사용한) 간단한 규칙을 모두 학습할 수 있음(일반적인 MLP는 네트워크에 있는 층 전체에 모든 데이터를 통과시킴 데이터에 있는 간단한 패턴이 연속된 변환으로 인해 왜곡될 수 있음)
2. 일부 특성은 짧은 경로로, 다른 특성들은 깊은 경로로 전달하려면?
: 여러 입력을 사용하기(입력마다 하나의 행렬의 튜플 전달)
3. 여러 개의 출력을 하려면?
(1) 적절한 층에 연결하고 모델의 출력 리스트에 추가해서 보조 출력 추가하기
(2) 각 출력은 자신만의 손실 함수 필요
(3) 모델 컴파일 시, 손실의 리스트 전달이 요구됨
(4) 케라스는 나열된 손실을 모두 더하여 최종 손실을 구해 훈련에 사용
(5) 손실의 가중치를 지정하여, 보조 출력과 주 출력 중 어디가 중요도가 높은지를 나타낼 수 있음
(6) 모델 훈련 시, 각 출력에 대한 레이블 제공해야함
(7) 모델 평가 시, 케라스는 개별 손실과 측정 지표, 손실의 가중치 합을 반환
(8) Predict() 메서드는 각 출력에 대한 예측, 튜플, 딕셔너리를 반환함
10.2.4 서브 클래싱 API로 동적 모델 만들기
: 케라스를 사용하여 신경망을 만들고 훈련하기
1. 시퀀셜 API, 함수형API : 선언적임
(모델에 데이터 주입하여 훈련이나 추론을 시작하기 전, 사용할 층과 연결 방식을 먼저 정의해야함)
2. 장점
(1) 모델의 저장, 복사, 공유가 용이함
(2) 모델의 구조 출력, 분석이 용이함
(3) 프레임워크가 크기를 집작하고 타입을 확인하여 에러를 모델에 데이터가 주입되기 전 일찍 발견할 수 있음
(4) 디버깅이 용이함(전체 모델이 층으로 구성된 정적 그래프이므로)
-> 단점도 됨 : 여러 동적 구조를 필요로 하는 모델도 있기 때문임
-> 해소 : 서브클래싱 API로 명령형 프로그래밍 스타일로 하면 됨
10.2.5 모델의 저장과 복원하기
1. 훈련된 케라스 모델을 저장하기
(1) Save_format=”tf”로 설정하면 케라스는 텐서플로의 SavedModel 포맷을 사용하여 모델을 저장함. 여러 파일과 서브디렉터리를 포함함
(2) Saved_model.pb 파일 : 모델의 아키텍처와 로직이 직렬화된 계산 그래프 형태로 포함되어있음
(3) Keras_metadata.pb 파일 : 케라스에 필요한 추가 정보 포함
(4) Variables 서브디렉터리 : 모든 파라미터 값 포함(분할 저장하기도 함)
(5) Assets 디렉터리
- 추가 파일(데이트 샘플, 클래스 이름 등) 포함
- 기본적으로 비어있음
- 옵티마이저도 저장될 수 있음
2. 전체 모델을 저장할 수도 있고 파라미터값(가중치)만 저장할 수도 있음
(1) 후자가 더 빠르고 디스크 공간도 덜 사용하므로 훈련 중에 체크포인트를 빠르게 저장하는 데 더 적합함(큰 모델 훈련 시 시간이 많이 소요되느모 체크포인트를 정기적으로 저장하는데도 더 적합함)
10.2.6 콜백 사용하기
1. Fit() 메서드에 callbacks 매개변수를 사용하여 케라스가 훈련의 시작 전이나 후에 호출할 객체 리스트 지정 가능(또는 에포크의 시작 전후, 각 배치 처리 전후에 호출할 수도 있음) 그렇게 해서 fit() 메서드에 체크포인트 저장함
2. 콜백 종류 : ModelCheckpoint, EarlyStopping, 사용자 정의 콜백(더 많은 제어 가능)
10.2.7 텐서보드로 시각화하기
1. 텐서보드 : 인터랙티브 시각화 도구
2. 훈련하는 동안 학습 곡선을 그리거나 여러 실행 간의 학습 곡선을 비교하고 계산 그래프 시각화와 훈련 통계 분석을 수행할 수 있음
3. 모델이 생성한 이미지를 확인하거나 3D에 투영된 복잡한 다차원 데이터를 시각화하고 자동으로 클러스터링하며 네트워크 프로파일링 등에도 사용할 수 있음
4. 프로그램을 수정하여 이벤트 파일이라는 특별한 이진 로그 파일에 시각화하려는 데이터를 출력해야함
5. 텐서보드 서버는 로그 디렉터리를 모니터링하고 자동으로 변경 사항을 읽어 그래프를 업데이트함(실시간으로 데이터 시각화)
6.
텐서보드 서버가 루트 로그 디렉터리를 가리키고 프로그램은 실행할 때마다 다른 서브디렉터리에 이벤트를 기록함
-> 하나의 텐서보드 서버가 여러 번 실행한 프로그램의 결과를 시각화하고 비교할 수 있음(복잡하지도 않음)
10.3 신경망 하이퍼파라미터 튜닝하기
: 신경망에서는 층의 개수, 층마다 있는 뉴런의 개수, 가중치 초기화 전략, 학습률 등 많은 것들을 바꿀 수 있음(유연함)
-> 어떤 조합이 최적일지, 하이퍼파라미터 조합을 결정하기
1. 케라스 모델을 사이킷런 추정기로 변환한 다음 하이퍼파라미터를 미세 튜닝하기
2. 케라스 튜너 라이브러리 사용하기(케라스 모델을 위한 하이퍼파라미터 튜닝 라이브러리)
: 여러 튜닝 전략 제공, 사용자 정의 가능, 텐서보드와의 통합이 뛰어남
(1) 케라스 튜너 사용하는 방식
%pip install -q -U keras-tuner 명령 실행
-> keras_tuner를 kt로 임포트
-> 케라스 모델을 구축, 컴파일하여 반환하는 함수 작성
-> 함수에서 매개변수로 받은 객체를 사용해서 하이퍼파라미터와 함께 가능한 값의 범위 정의
-> 이 하이퍼파라미터를 사용해서 모델 만들고 컴파일 하기
(2) 랜덤 서치 수행하기
Kt.RandomSearch 튜너 만들기
-> build_model 함수를 생성자에 전달하기
-> 튜너의 search() 메서드 호출하기
(3) 각 튜너는 오라클의 안내를 받음(튜너는 각 시도 전에 오라클에 다음 시도가 무엇인지 알려달라고 요청하고, 모든 시도를 기록하는 오라클은 최상의 시도를 요청하여 해당 신호의 요약을 출력해줌)
(4) 최상의 모델 성능이 만족스럽다면 전체 훈련 세트에서 훈련, 테스트 세트에서 평가, 제품에 배포하면 됨
10.3.1 은닉 층 개수
1. 이론적으로는, 은닉 층이 하나인 다층 퍼셉트론이더라도 뉴런 개수가 충분하면 아주 복잡한 함수도 모델링할 수 있지만 복잡한 문제에서는 심층 신경망이 (얕은 신경망보다) 파라미터 효율성이 훨씬 좋음. (심층 신경망은 복잡한 함수를 모델링하는 데 얕은 신경망보다 훨씬 적은수의 뉴런을 사용하므로 동일한 양의 훈련 데이터에서 더 높은 성능을 낼 수 있음)
2. 계층 구조
(1) 심층 신경망이 좋은 솔루션으로 빨리 수렴하게 도와줌
(2) 새로운 데이터에 일반화되는 능력도 향상시킴(재사용가능)
(근데 재사용도, 비슷한 작업에서 가장 뛰어난 성능을 낸 미리 훈련된 네트워크 일부를 재사용함)
(3) 새로운 신경망에서 처음 몇 개 층의 가중치와 편향을 난수로 초기화하는 대신 첫 번째 신경망의 층에 있는 가중치와 편향 값으로 초기화할 수 있음
-저수준 구조 학습 필요 없고 고수준 구조만 학습하면 됨. 한 두 개의 은닉 층만으로도 많은 문제를 꽤 잘 해결할 수 있음.
-복잡한 문제더라도 훈련 세트에 과대 적합이 생길 때까지 점진적으로 은닉 층의 수를 늘리면 됨
(-> 이걸 전이 학습이라고 함)
10.3.2 은닉 층의 뉴런 개수
1. 입력 층과 출력 층의 뉴런 개수는 해당 작업에 필요한 입력과 출력의 형태에 따라 결정됨
2. 은닉 층 : 각 층의 뉴런을 점점 줄여서 깔때기처럼 구성(저수준의 많은 특성이 고수준의 적은 특성으로 합쳐짐)(첫 번 째 은닉 층을 제일 크게 하는 것이 도움이 됨)
3. 네트워크가 과대적합이 시작되기 전까지 점진적으로 뉴런 수 늘릴 수 있음
4. 필요한 것보다 더 많은 층과 뉴런을 가진 모델을 선택한 다음, 과대적합되지 않도록 조기 종료나 규제 기법을 사용할 수 있음(스트레치 팬츠 방식)
5. 모델에서 문제를 일으키는 병목 층을 피할 수 있음
6. 층의 뉴런 수를 늘리는 것보다 층 수를 늘리는 게 나음
10.3.3 학습률, 배치 크기 그리고 다른 하이퍼파라미터
: 은닉 층, 뉴런 개수 이외의 튜닝할 하이퍼파라미터들과 조정 방법
1. 학습률
(1) 가장 중요한 하이퍼파라미터
(2) 최적의 학습률은 최대 학습률의 절반 정도
(3) 좋은 학습률을 찾는 방법
- 매우 낮은 학습률에서 시작해서 점진적으로 매우 큰 학습률까지 수백 번 반복하여 모델을 훈련시키기
(반복마다 일정한 값을 학습률에 곱한다)
-> 학습률에 대한 손실을 그래프로 그리기
-> 처음에는 손실이 줄어듦, 잠시 후 학습률이 커지면 손실이 다시 커짐
-> 최적의 학습률은 손실이 다시 상승하는 지점보다 조금 아래에 위치(약 10배 낮은 지점)
-> 최적 찾았으니 다시 모델 초기화하고 최적의 학습률을 사용해 다시 정상적으로 훈련시키기
2. 옵티마이저
3. 배치 크기
(1) 모델 성능과 훈련 시간에 큰 영향을 미침
(2) 큰 배치 크기 사용의 장점
- 하드웨어 가속기(GPU)를 효율적으로 활용할 수 있음
-> 초당 더 많은 샘플을 처리할 수 있게 되는 훈련 알고리즘
- 맞는 것들 중, 가장 큰 배치 크기 사용하기
(3) 큰 배치 크기 사용의 단점
- 훈련초기에 종종 훈련이 불안정하다는 것 주의하기
- 결과 모델이 작은 배치 크기로 훈련된 모델만큼 일반화 성능을 내지 못할 수도 있음
(그러면 작은 배치 크기로 시도해보기)
(4) 배치 크기는 훈련 시간을 매우 단축시킴. 일반화 성능에는 영향을 미치지 않음.
4. 활성화 함수
: 출력 층의 활성화 함수는 수행하는 작업에 따라 달라짐
5. 반복 횟수
: 대부분의 경우, 훈련 반복 횟수는 튜닝할 필요가 없음. 대신 조기 종료를 사용함.
'스터디 > 24-1 스터디 _ 핸즈온 머신러닝(3판)' 카테고리의 다른 글
핸즈온 머신러닝(3판) - 3장 분류 (0) | 2024.05.07 |
---|