본문 바로가기

Lecture AI

(24)
5. 컨브넷의 학습 시각화하기 딥러닝 모델을 '블랙 박스' 같다고 자주 이야기합니다. 학습된 표현에서 사람이 이해하기 쉬운 형태를 뽑아내거나 제시하기 어렵기 때문입니다. 일부 딥러닝 모델에서는 이 말이 어느정도 맞지만 컨브넷에서는 전혀 아닙니다. 컨브넷의 표현은 시각적인 개념을 학습한 것이기 때문에 시각화하기 아주 좋습니다. 2013년부터 이런 표현들을 시각화하고 해석하는 다양한 기법들이 개발되었습니다. 여기서 모두를 다룰 수는 없지만 가장 사용이 편하고 유용한 세 가지 기법을 다루겠습니다. 컨브넷 중간 층의 출력(중간 층에 있는 활성화)을 시각화하기 : 연속된 컨브넷층이 입력을 어떻게 변형시키는지 이해하고 개별적인 컨브넷 필터의 의미를 파악하는 데 도움이 됩니다. 컨브넷 필터를 시각화하기 : 컨브넷의 필터가 찾으려는 시각적인 패턴과..
4.사전 훈련된 컨브넷 사용하기 작은 이미지 데이터셋에 딥러닝을 적용하는 일반적이고 매우 효과적인 방법은 사전 훈련된 네트워크를 사용하는 것입니다. 사전 훈련된 네트워크는 일반적으로 대규모 이미지 분류 문제를 위해 대량의 데이터셋에서 미리 훈련되어 저장된 네트워크입니다. 원본 데이터셋이 충분히 크고 일반적이라면 사전 훈련된 네트워크에 의해 학습된 특성의 계층 구조는 실제 세상에 대한 일반적인 모델로 효율적인 역할을 할 수 있습니다. 새로운 문제가 원래 작업과 완전히 다른 클래스에 대한 것이더라도 이런 특성은 많은 컴퓨터 비전 문제에 유용합니다. 예를 들어 (대부분 동물이나 생활 용품으로 이루어진) ImageNet 데이터셋에 네트워크를 훈련합니다. 그다음 이 네트워크를 이미지에서 가구 아이템을 식별하는 것 같은 다른 용도로 사용할 수 있..
3. 신경망의 엔진 : 확율적 경사 하강법 미분 가능한 함수가 주어지면 이론적으로 이 함수의 최솟값을 해석적으로 구할 수 있습니다. 함수의 최솟값은 변화율이 0인 지점입니다. 신경망에 적용하면 가장 작은 손실 함수의 값을 만드는 가중치의 조합을 해석적으로 찾는 것을 의미합니다. [생략] 앞의 알고리즘 네 단계를 응용하여 랜덤한 배치 데이터에서 현재 손실 값을 토대로 하여 조금씩 파라미터를 수정하는 방법이 있습니다. 미분 가능한 함수를 가지고 있으므로 그래디언트를 계산하여 단계 4를 효율적으로 구현할 수 있습니다. 그래디언트의 반대 방향으로 가중치를 업데이트하면 손실이 매번 조금씩 감소할 수 있습니다. 1. 훈련 샘플 x와 이에 상응하는 타깃 y의 배치를 추출합니다. 2. x를 사용하여 네트워크를 실행하고(정방향 패스(forward pass) 단계..
2. 신경망의 엔진 : 그래디언트 기반 최적화 MNIST예제에서 신경망의 각 층은 입력 데이터를 다음과 같이 변환합니다. output = relu(dot(W, input)+b) 이 식에서 텐서 W와 b는 층의 속성처럼 볼 수 있습니다. 가중치(weight)또는 훈련되는 파라미터라고 부릅니다. 이런 가중치에는 훈련 데이터를 신경망에 노출시켜서 학습된 정보가 담겨 있습니다. 초기에는 가중치 행렬이 작은 난수로 채워져 있습니다(무작위 초기화(random initialiaztion)단계라고 부릅니다.) 물론 W와 b가 난수일 떄 relu(dot(W, input)+b)가 유용한 어떤 표현을 만들 것이라고 기대할 수는 없습니다. 즉 의미 없는 표현이 만들어집니다. 하지만 다음단계에서부터는 피드백 신호에 기초하여 가중치가 점진적으로 조정될 섯입니다. 이런 점진적..
3. 소규모 데이터셋에서 밑바닥부터 컨브넷을 훈련하기 · 매우 적은 데이터를 사용해 이미지 분류 모델을 훈련하는 일은 흔한 경우입니다. 여러분이 전문적인 컴퓨터 비전 작업을 한다면 실제로 이런 상황을 마주치게 될 가능성이 높습니다. 보통 '적은' 샘플이란 수백 개에서 수만 개 사이를 의미합니다. 실용적인 예제로 4,000개의 강아지와 고양이 사진(2,000개는 강아지, 2,000개는 고양이)으로 구성된 데이터셋에서 강아지와 고양이 이미지를 분류해 보겠습니다. 훈련을 위해 2,000개의 사진을 사용하고 검증과 테스트에 각각 1,000개의 사진을 사용하겠습니다. 이 절에서 문제를 해결하기 위해 기본적인 전략 하나를 살펴볼 것입니다. 보유한 소규모 데이터셋을 사용해 처음부터 새로운 모델을 훈련하는 것입니다. 2,000개의 훈련 샘플에서 작은 컨브넷을 어떤 규제 ..
2. 합성곱 연산의 방법 완전 연결 층과 합성곱 층 사이의 근본적인 차이는 다음과 같습니다. Dense층은 입력 특성 공간에 있는 전력 패턴(예를 들어 MNIST 숫자 이미지에서는 모든 픽셀에 걸친 패턴)을 학습하지만 합성곱 층은 지역 패턴을 학습합니다. 이미지일 경우 작은 2D 윈도우로 입력에서 패턴을 찾습니다. 이 핵심 특징은 컨브넷에 두 가지 흥미로운 성질을 제공합니다. 학습된 패턴은 평행 이동 불변성을 가집니다. 컨브넷이 이미지의 오른쪽 아래 모서리에서 어떤 패턴을 학습했다면 다른 곳(예를 들어 왼쪽 위 모서리)에서도 이 패턴을 인식할 수 있습니다. 완전 연결 네트워크는 새로운 위치에 나타난 것은 새로운 패턴으로 학습해야 합니다. 이런 성질은 컨브넷이 이미지를 효율적으로 처리하게 만들어 줍니다.(근본적으로 우리가 보는 세..
1.합성곱 신경망 소개 컨브넷 정의와 컨브넷이 컴퓨터 비전 관련 작업에 잘 맛는 이유에 대해 이론적 배경을 알아봅시다. 컨브넷이 (image_height, image_width, image_channels) 크기의 입력 텐서를 사용한다는 점이 중요합니다(배치 차원은 포함하지 않습니다). 이 예제에서는 MNIST 이미지 포맷인 (28, 28, 1) 크기의 입력을 처리하도록 컨브넷을 설정해야 합니다. 이 때문에 첫 번째 층의 매개변수로 input_shape=(28, 28, 1)을 전달합니다. from keras import layers from keras import models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', in..
4.가중치 규제 추가에 대해 : L1규제, L2규제, 드롭아웃 / 정리하기 L1규제, L2규제 어떤 훈련 네트워크 구조가 주어졌을 때 데이터를 설명할 수 있는 가중치 값의 집합은 여러 개(여러 개의 모델)입니다. 간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 높습니다. 간단한 모델이라 함은 파라미터 값 분포의 엔트로피가 작은 모델이나 적은 수의 파라미터를 가진 모델입니다. 그러므로 과대적합을 완화하기 위한 일반적인 방법은 네트워크의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것입니다. 가중치 값의 분포가 더 균일하게 됩니다. 이를 가중치 규제(weight regularization)라고 하며, 네트워크의 손실 함수에 큰 가중치에 연관된 비용을 추가합니다. 두 가지 형태의 비용이 있습니다. L1규제: 가중치의 절댓값에 비례하는 비용이 추가됩니다. L2규제:..
3.데이터 전처리, 특성 공학, 특성 학습 1.신경망을 위한 데이터 전처리 데이터 전처리목적은 주어진 원본 데이터를 신경망에 적용하기 쉽도록 만드는 것입니다. 벡터화, 정규화, 누락된 값 다루기, 특성 추출 등이 포함됩니다. 1. 벡터화: 신경망에서 모든 입력 타깃은 부동 소수 데이터로 이루어진 텐서여야 합니다.(또는 특정 경우에 정수로 이루어진 텐서입니다.). 사운드, 이미지, 텍스트 등 처리해야 할 것이 무엇이든지 먼저 텐서로 변환해야 합니다.이 단계를 데이터 벡터화라고 합니다. 2. 값 정규화: 일반적으로 비교적 큰 값(예를 들어 네트워크의 가중치 초깃값보다 훨씬 큰 여러 자릿수를 가진 정수)이나 균일하지 않은 데이터(예를 들어 한 특성의 범위는 0~1이고 다른 특성은 100~200인 데이터)를 신경망에 주입하는 것은 위험합니다. 이렇게 하..
1. 신경망을 위한 데이터 표현: 텐서 0D부터 5D까지 2. 첫번째 신경망 실습 :mnist 실습 Note: 클래스와 레이블에 관한 노트 머신 러닝에서 분류 문제의 범주(category)를 클래스(class)라고 합니다. 데이터 포인트는 샘플(sample)이라고 합니다. 특정 샘플의 클래스는 레이블(label)이라고 합 nicola-ml.tistory.com 위의 실습을 보면 텐서라 부르는 다차원 넘파이 배열에 데이터를 저장하는 것부터 시작합니다. 최근의 모든 머신 러닝 시스템은 일반적으로 텐서를 기본 데이터 구조로 사용합니다. 핵심적으로 텐서는 데이터를 위한 컨테이너(container)입니다. 대부분 수치형 데이터를 다루므로 숫자를 위한 컨테이너입니다. 1.1. 스칼라(0D 텐서) 하나의 숫자만 담고 있는 텐서를 스칼라(scalar)(또는 스칼라 텐서, 0..
2. 첫번째 신경망 실습 :mnist 실습 Note: 클래스와 레이블에 관한 노트 머신 러닝에서 분류 문제의 범주(category)를 클래스(class)라고 합니다. 데이터 포인트는 샘플(sample)이라고 합니다. 특정 샘플의 클래스는 레이블(label)이라고 합니다. MNIST 데이터셋을 이용한 첫 번째 실습을 해보겠습니다. - 코드 보기 from keras.datasets import mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_x 가 모델이 학습해야 할 훈련 세트(training set)를 구성합니다. 모델은 test_x로 구성된 테스트 세트(test set)에서 테스트될 것입니다. 이미지는 넘파이 배열로 인코딩 되어 있고 레..
1. 딥러닝이란 무엇인가? 작동 원리에 대한 이해 딥러닝이란 무엇인가?____________________________ 딥러닝은 머신 러닝의 특정한 한 분야로서 연속된 층(layer)에서 점진적으로 의미 있는 표현을 배우는 데 강점이 있으며, 데이터로부터 표현을 학습하는 새로운 방식입니다. 딥러닝의 딥(deep)란 단어는 연속된 층으로 표현을 학습한다는 개념을 나타냅니다. 데이터로부터 모델을 만드는 데 얼마나 많은 층을 사용했는지가 그 모델의 깊이가 됩니다. 딥러닝에서는 기본 층을 겹겹이 쌓아 올려 구성한 신경망이라는 모델을 사용하여 표현 층을 학습합니다. ↓ 위의 그림과 같이 최종 출력에 대해 점점 더 많은 정보를 가지지만 원본 이미지와는 점점 더 다른 표현하는 숫자 이미지가 변환됩니다. 심층 신경망을 정보가 연속된 필터를 통과하면서 순도 높게 (즉..
5. 온도예측 실습과 함께 알아보는 순환 신경망의 고급 사용법 : 드럽아웃, 스테킹 순환층, 양방향 RNN 4. 온도예측 실습과 함께 알아보는 순환 신경망의 고급 사용법 순환 신경망의 성능과 일반화 능력을 향상시키기 위한 세 가지 고급 기술을 살펴보겠습니다. 순환 드롭아웃(recurrent dropout): 순환 층에서 과대적합을 방지하기 위해 케라스에 내장되어 있는 드롭 nicola-ml.tistory.com 상기 포스팅과 연결된 문서입니다. 그렇다고 이 문제에 머신 러닝이 적합하지 않다는 뜻은 아닙니다. 앞선 모델은 시계열 데이터를 펼쳤기 때문에 입력 데이터에서 시간 개념을 잃어버렸습니다. 그 대신 인과 관계와 순서가 의미 있는 시퀀스 데이터를 그대로 사용해 보겠습니다. 이런 시퀀스 데이터에 아주 잘 들어맞는 순환 시퀀스 처리 모델을 시도해 보겠습니다. 이 모델은 앞선 모델과 데이터 포인터의 시간 순서를 ..
4. 온도예측 실습과 함께 알아보는 순환 신경망의 고급 사용법 순환 신경망의 성능과 일반화 능력을 향상시키기 위한 세 가지 고급 기술을 살펴보겠습니다. 순환 드롭아웃(recurrent dropout): 순환 층에서 과대적합을 방지하기 위해 케라스에 내장되어 있는 드롭아웃을 사용합니다. 스태킹 순환 층(stacking recurrent layer): 네트워크의 표현 능력(representational power)을 증가시킵니다. (그 대신 계산 비용이 많이 듭니다.) 양방향 순환 층(bidirectional recurrent layer): 순환 네트워크에 같은 정보를 다른 방향으로 주입하여 정학도를 높이고 기억을 좀 더 오래 유지시킵니다. 기온 예측 문제 본 예제에서는 막스 플랑크 생물지구화학 연구소의 지상 관측소에서 수집한 데이터를 대상으로 기온 예측에 대한 문제를..
3. 순환 신경망의 이해와 SimpleRNN과 LSTM의 차이 완전 연결 네트워크나 컨브넷처럼 지금까지 본 모든 신경망의 특징은 메모리가 없다는 것입니다. 네트워크에 주입되는 입력은 개별적으로 처리되며 입력 간에 유지되는 상태가 없습니다. 이런 네트워크로 시퀀스나 시계열 데이터 포인트를 처리하려면 네트워크에 전체 시퀀스를 주입해야 합니다. 즉 전체 시퀀스를 하나의 데이터 포인트로 변환해야 합니다. 예를 들어 IMDB문제에서 영화 리뷰 하나를 큰 벡터 하나로 변환하여 처리했습니다. 이런 네트워크를 피드포워드 네트워크라고 합니다. 순환신경망(RNN)은 같은 원리를 적용한 것입니다. 시퀀스의 원소를 순회하면서 지금까지 처리한 정보를 상태(state)에 저장합니다. 사실 RNN은 내부에 루프(loop)를 가진 신경망의 한 종류입니다. RNN의 상태는 2개의 다른 시퀀스를 ..
2. 모든 내용을 적용하기: 원본 텍스에서 단어 임베딩까지 문장들을 벡터의 시퀀스로 임베딩하고 펼친 후 그 위에 Dense층을 훈련합니다. 여기서는 사전 훈련된 단어 임베딩을 사용하겠습니다. 케라스에 포함된 IMDB데이터는 미리 토큰화가 되어 있습니다. 이를 사용하는 대신 원본 텍스트 데이터를 내려받아 처음부터 시작하겠습니다. 데이터 다운로드(https://mng.bz/0tIo) 하시면 됩니다. 데이터 전처리 다운로드 받은 데이터를 훈련용 리뷰 하나를 문자열 하나로 만들어 훈련 데이터를 문자열의 리스트로 구성해 보겠습니다. 리뷰 레이블(긍정/부정)도 labels리스트로 만들겠습니다. IMDB 원본 데이터 전처리하기 import os imdb_dir = './AI_Tensorflow/data/aclImdb' train_dir = os.path.join(imdb_d..