일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- DFS
- 인공지능
- 정렬
- 재귀함수
- 그리디
- RESNET
- BFS
- 알고리즘
- 선형대수
- 스택
- rnn
- 캐치카페신촌점 #캐치카페 #카페대관 #대학생 #진학사 #취준생
- Machine Learning
- 이진 탐색
- LSTM
- 머신러닝
- 선택정렬
- GRU
- 삽입정렬
- AI
- 딥러닝
- 최단 경로
- 큐
- 퀵정렬
- 계수정렬
- 다이나믹 프로그래밍
- pytorch
- Today
- Total
hyeonzzz's Tech Blog
[Andrew Ng] 딥러닝 4단계 : 3. convNets-실질적 조언들 본문
1. 오픈소스를 활용해라
<오픈 소스 구현을 활용하는 방법>
많은 신경망이 따라하기 까다로운 이유는 하이퍼 파라미터를 조정 학습율 감쇠 등으로 성능의 차이가 생길 수 있기 때문입니다. 그리고 때로는 발표된 논문을 읽는 것만으로는 따라하는데 어려움이 있습니다. 운이 좋게도 많은 딥러닝 연구자들은 일반적으로 Github 같이 인터넷에 오픈 소스로 작품을 올려놓죠. 기반을 삼고 싶은 논문을 찾게 된다면 온라인에서 오픈 소스의 구현법을 찾으면 됩니다.
<GitHub로부터 오픈 소스 코드를 다운 받기>
컴퓨터 비전 앱을 개발 중이라면 작업의 흐름에 있어서 자연스러운 것은 배우거나 들어본 구조를 선택해서 사용할 때 오픈 소스의 구현법을 찾아서 GitHub로부터 다운 받아서 시작하는 것입니다. 이렇게 하는 것의 장점은 때로는 네트워크가 훈련하는데 많은 시간을 필요로 하는데 누군가가 다중 GPU를 이용해 거대한 데이터 세트로 네트워크를 미리 훈련시켜 놓아서 전이 학습이 가능할 수도 있습니다.
2. 전이학습
컴퓨터 비전 프로그램을 구성할 때 무작위한 초기화 과정으로 시작하는 대신 다른 이들이 훈련시켜놓은 구조를 다운 받는 것이 훨씬 효과적입니다. 전이 학습을 이용해서 공유된 데이터 세트를 통해 얻을 지식을 우리의 문제에 전달하는 것이죠.
고양이 인식기 예시를 통한 딥러닝 모델 구축
고양이 인식기를 만드는 문제를 예로 들어 컴퓨터 비전 분야에서의 딥러닝 모델 구축과 전이 학습에 대해 살펴보겠습니다. 여기서는 Tigger, Misty, 그리고 둘 다 아닌 클래스를 분류하는 모델을 만들 것입니다.
1. 오픈 소스 신경망 활용
먼저, 온라인에서 신경망의 오픈 소스 구현법과 가중치를 받아야 합니다. 많은 네트워크가 ImageNet 같은 대형 데이터 세트를 기반으로 훈련되었으며, 이는 수천 개의 클래스를 가진 소프트맥스 유닛을 포함하고 있습니다. 우리가 원하는 것은 단 세 개의 클래스(Tigger, Misty, 둘 다 아님)로 분류하는 것이므로, 다음 단계가 필요합니다.
2. 소프트맥스 층 교체
기존 소프트맥스 층을 제거하고, Tigger, Misty, 둘 다 아님을 출력하는 새로운 소프트맥스 유닛으로 교체합니다. 이렇게 하면 우리가 원하는 세 가지 클래스를 예측할 수 있습니다.
3. 층 고정 및 소프트맥스 층만 훈련
모든 층의 가중치를 고정(freeze)하고, 소프트맥스 층만 훈련시킵니다. 프레임워크에 따라 동결된 층을 설정하는 방법이 다릅니다.
4. 훈련 속도 향상
모든 훈련 세트의 활성값을 미리 계산하고 디스크에 저장한 후, 소프트맥스 층만 훈련하는 방법도 유용합니다. 이렇게 하면 훈련 속도를 크게 높일 수 있습니다.
5. 더 큰 데이터 세트 활용
데이터 세트가 더 큰 경우, 몇 개의 층만 고정하고 나머지 층을 훈련시킬 수 있습니다. 이는 모델의 일반화 능력을 높이는 데 도움이 됩니다.
6. 전체 네트워크 훈련
데이터가 매우 많을 경우, 오픈 소스 네트워크와 가중치를 초기화로 사용하고 전체 네트워크를 다시 훈련시킬 수 있습니다. 이 경우 모든 층을 훈련하게 됩니다.
3. Data Augmentation
데이터 확대는 컴퓨터 비전 모델의 성능을 높이기 위해 자주 사용되는 기술입니다. 이는 전이 학습을 통해 미리 훈련된 가중치를 사용할 때나 처음부터 직접 훈련할 때 모두 적용할 수 있습니다. 다음은 컴퓨터 비전에서 일반적으로 사용되는 데이터 확대 방법들입니다.
1. 수직 축 대칭 (Mirroring)
이미지를 수직 축을 기준으로 대칭 이동하는 방식입니다. 예를 들어, 왼쪽에 고양이가 있는 이미지를 오른쪽에 고양이가 있는 이미지로 변환합니다. 대부분의 컴퓨터 비전 문제에서는 이러한 대칭 작업이 유효합니다.
2. 무작위 크로핑 (Random Cropping)
이미지의 일부분을 무작위로 잘라내어 새로운 훈련 데이터를 만드는 방식입니다. 예를 들어, 이미지의 다양한 부분을 잘라내어 서로 다른 예시로 사용합니다. 완벽한 방식은 아니지만, 이미지의 큰 부분을 유지함으로써 유용한 데이터를 생성할 수 있습니다.
3. 색 변환 (Color Shifting)
RGB 각 채널에 서로 다른 값을 더하거나 빼서 색을 변환하는 방식입니다. 예를 들어, 빨강과 파랑 채널을 더하고 초록 채널을 빼면 전체적으로 보라색에 가까운 이미지가 생성됩니다. 이러한 색 변환은 훈련 알고리즘이 색 변화에 더 잘 반응하도록 도와줍니다.
4. 기타 변형 (Other Transformations)
이미지 회전, 비틀기, 뒤틀기 등의 방법도 이론적으로 사용될 수 있지만, 복잡성 때문에 실제로는 많이 사용되지 않습니다.
PCA 색 확대 (PCA Color Augmentation)
주성분분석(PCA)을 사용하여 색 변형을 수행하는 방법입니다. 예를 들어, 이미지의 주된 색이 보라색이라면 PCA 색 확대는 빨강과 파랑 채널에 큰 값을 더하거나 빼고 초록 채널에는 상대적으로 적은 값을 더하거나 빼서 전체적인 색조를 유지합니다. 이 방법은 AlexNet 논문에서 제시된 기술입니다.
데이터 확대 구현
데이터 확대는 CPU 쓰레드를 사용하여 하드 디스크에서 이미지를 불러오고 변형을 적용한 뒤, 변형된 데이터를 GPU 또는 CPU에서 훈련하는 방식으로 이루어집니다. 이러한 작업은 여러 쓰레드를 사용하여 병렬로 수행될 수 있습니다.
데이터 확대를 위한 하이퍼파라미터에는 색 변환의 정도나 무작위 크로핑의 범위 등이 포함됩니다. 오픈 소스를 사용하면 이러한 하이퍼파라미터를 쉽게 설정할 수 있으며, 필요에 따라 직접 조정할 수도 있습니다.
4. 컴퓨터 비전 시스템을 구축하기 위한 팁
데이터의 양에 따른 접근 방식
- 적당한 데이터: 음성 인식 분야는 문제의 복잡성에 비해 비교적 적당한 양의 데이터를 가지고 있습니다.
- 많은 데이터: 이미지 인식 분야는 상당한 양의 데이터를 필요로 합니다. 그러나 이미지의 모든 픽셀을 분석해야 하는 복잡성 때문에 여전히 더 많은 데이터가 필요합니다.
- 적은 데이터: 물체 인식 분야는 상대적으로 더 적은 데이터를 가집니다. 물체 인식은 경계선을 그려 물체의 위치를 식별하는데, 이 과정이 더 많은 비용과 노력을 요구하기 때문입니다.
머신 러닝 문제 스펙트럼
- 많은 데이터: 많은 데이터를 가진 경우, 간단한 알고리즘과 최소한의 수작업 설계로 좋은 성능을 얻을 수 있습니다.
- 적은 데이터: 데이터가 충분하지 않다면, 직접 특성을 설계하고 네트워크 구조를 복잡하게 만드는 것이 좋은 성능을 얻기 위한 방법입니다.
직접 설계의 필요성
컴퓨터 비전 분야는 복잡한 함수를 학습해야 하므로 데이터가 충분하지 않은 경우가 많습니다. 이는 직접 설계를 더 많이 필요로 하게 만듭니다. 데이터의 부족을 해결하기 위해 전이 학습을 사용하면 도움이 됩니다. 컴퓨터 비전의 연구자들은 벤치마킹 데이터 세트와 경연에서 좋은 성과를 내기 위해 집중합니다.
벤치마킹에서의 팁
- 앙상블(Ensembling): 여러 개의 신경망을 독립적으로 훈련시키고, 그 예측값을 평균내어 성능을 향상시킵니다. 그러나 이는 실행 시간을 지연시키고 메모리를 많이 차지하기 때문에 실제 제품에서는 거의 사용되지 않습니다.
- 다중 크로핑(Multi-Cropping): 이미지의 여러 부분을 잘라내어 분류기에 넣고, 예측값을 평균내어 성능을 향상시킵니다. 이 방법도 실행 시간을 지연시키기 때문에 실제 제품보다는 벤치마킹에 주로 사용됩니다.
실용적인 시스템 구축
실제 시스템을 구축할 때는 이미 누군가가 설계한 신경망 구조와 오픈 소스 구현을 사용하는 것이 좋습니다. 이는 학습률 감쇠나 하이퍼 파라미터 같은 세부 사항을 설정하는 데 도움을 줄 수 있으며, 이미 훈련된 모델과 데이터 세트를 활용하여 빠르게 진행할 수 있습니다.
'Deep Learning > Basics' 카테고리의 다른 글
[Andrew Ng] 딥러닝 4단계 : 2. 케이스 스터디 (1) | 2024.06.10 |
---|---|
seq2seq, Attention, Transformer, BERT 정리 (0) | 2024.05.31 |
[파이토치 딥러닝 프로젝트 모음집] 1. 인공지능 (2) | 2024.03.12 |
순환 신경망 - LSTM / GRU (0) | 2024.03.08 |
[Andrew Ng] 딥러닝 4단계 : 1. 합성곱 신경망 네트워크 (CNN) (0) | 2024.02.05 |