RNN, CNN

2021. 6. 12. 10:01Artificial_Intelligence/etc

기존 Fullly Connected Layer와 CNN( Convolutional Neural Network)와 다른점

이미지 공간 정보를 유지한 상태로 학습이 가능하게 만든 모델

각 레이어의 입출력 데이터의 형상을 유지한다.

여러 개의 필터로 각 이미지의 특징을 추출하여 학습한다.

이미지 공간 정보를 유지하여 인접한 다른 이미지들과의 특징을 효과적으로 인식한다.

필터는 공유 파라미터이기에 기존 신경망보다 학습에 사용되는 파라미터가 적다.

컨브넷은 지역적이고 평행 이동으로 변하지 않는 특성을 학습함.

 

CNN의 구조

이미지의 특징을 추출하는 부분인 Convolution Layer와 Pooling Layer, 클래스를 분류하는 Flatten Layer 부분으로 이루어져 마지막 Fully Connected Neural Network와 이어진다.

 

Flatten Layer

컨볼루션층을 반복적으로 거치면 주요 특징만 추출되고, 추출된 주요 특징은 전결합층에 전달되어 학습하게 된다. 컨볼루션 레이어와 맥스풀링 레이어는 n차원 행렬을 다루지만, 전결합층에 전달하여 사용하려면 1차원 배열로 바꾸어 전달해야함. 이 떄 바꿔서 전달해주는 역할이 플래튼 레이어이다.

 

Convloution Layer

입력된 데이터에 필터를 적용하여 활성화 함수를 반영하여 넘긴다.

 

Pooling Layer

컨볼루션 레이어에서 나온 출력 데이터 값을 입력으로 받아서 Activation Map의 크기를 줄이고 특정 부분의 데이터를 강조하여 다음 레이어에 넘긴다.

Max pooling과 Average pooling과 Min pooling이 있다. 정사각형의 행렬모양으로, 설정한 영역안에 있는 데이터들의 값을 계산하여 특징을 추출한다.

 

 

합성곱(Convolution)

합성곱 연산을 통해 Feature Map을 형성하는 것이다.

 

패딩(Padding)

필터와 스트라이드로 인해 컨볼루션 레이어의 출력 데이터가 줄어드는데, 입력된 데이터의 외각주변에 설정한 픽셀만큼 특정 값으로 채워넣어 이를 방지한다. 보통 패딩 입력값은 0으로 설정한다.

Feature Map

합성곱층(Convolution Layer)에서 입력된 데이터를 필터(커널)로 순회하면서 합성곱을 하고, 이를 통해 생성된 출력값을 뜻하며, Activation Map과 동일한 의미이다.

 

Conv2D(32, (5, 5), padding='valid', input_shape=(28, 28, 1), activation='relu')

첫번째 인자 : 컨볼루션 필터의 수

두번째 인자 : 컨볼루션 커널의 (행, 열). 필터 크기

padding : 경계 처리 방법을 정의합니다.

‘valid’ : 유효한 영역만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작습니다.

‘same’ : 출력 이미지 사이즈가 입력 이미지 사이즈와 동일합니다.

input_shape : 샘플 수를 제외한 입력 형태를 정의 합니다. 모델에서 첫 레이어일 때만 정의하면 됩니다. (행, 열, 채널 수)로 정의합니다. 흑백영상인 경우에는 채널이 1이고, 컬러(RGB)영상인 경우에는 채널을 3으로 설정합니다.

activation : 활성화 함수 설정합니다.

‘linear’ : 디폴트 값, 입력뉴런과 가중치로 계산된 결과값이 그대로 출력으로 나옵니다.

‘relu’ : rectifier 함수, 은익층에 주로 쓰입니다.

‘sigmoid’ : 이진 분류 주로 사용

‘softmax’ : 다중 클래스 분류 주로 사용

 

ImageDataGenerator

ImageDataGenerator은 이미지 파일을 전처리된 배치 텐서로 바꾸어주는 제너레이터를 만드는 클래스이다. 즉, 사진 파일을 읽고, 타입을 RGB 픽셀 값으로 디코딩하고, 부동 소수타입의 텐서로 변환하여 픽셀값의 스케일을 0~255에서 0~1로 조정하는 과정을 쉽게 만들어주는 명령어이다.

 

Generator 제너레이터

Iterator를 생성해주는 함수로, 배치를 무한정 만들어내서 끝없이 반복한다. 따라서 반복 루프안에 break문을 사용해야한다.

 

임베딩 Embedding
단어와 밀집 벡터를 연관짓는 방법, 언어를 기하학적 공간에 매핑하는 것.

 

랜덤하게 벡터 선택의 문제점

임베딩 공간이 구조적이지 않음. 비슷한 의미로 사용되더라도 완전히 다른 임베딩을 가짐. 심층신경망은 구조적이지 않은 임베딩 공간을 이해하기 어려움

단어 벡터 사이에 추상적이고 기하학적인 관계를 얻기위해 단어 사이의 의미 관계를 반영해야함. 

단어간 유사도 계산할 수 없기에 단어의 의미를 벡터화함.

분산표현 : 각 단어간의 유사성을 표현하기위해 단어의 의미를 다차원공간에 벡터화 하는 것

 

사전 훈련된 단어 임베딩을 사용하는 이유

이미지 분류 문제에서 사전 훈련된 컨브넷을 사용하는 이유와 거의 동일합니다. 충분한 데이터가 없어서 자신만의 좋은 특성을 학습하지 못하지만 꽤 일반적인 특성이 필요할 때입니다. 이런 경우에는 다른 문제에서 학습한 특성을 재사용하는 것이 합리적입니다.

 

Fit_on_texts 입력에 맞게 내부 word_index 생성 > 딕셔너리처럼 키값과 벨류를 주는 것

 

RNN쓰는 이유

인풋데이터를 동시에 백터라이즈 시켜서 아웃풋이나오는데, 단어에는 순서가 있는데 이를 무시함. 인풋데이터 간에 state(상관관계)가 있고, 이를 고려해야함.

단어를 하나씩 순서를 주고(각각 정보를 주고)

하나씩 입력해서 돌리고, 나온 정보를 가지고 다음 입력을 받아서 돌리고 …

인풋과 스테이트를 다음 스테이트를 줌

 

  원-핫 벡터 임베딩 벡터
차원 고차원(단어 집합의 크기) 저차원
다른 표현 희소 벡터의 일종 밀집 벡터의 일종
표현 방법 수동 훈련 데이터로부터 학습함
값의 타입 1과 0 실수

원-핫 인코딩으로 만든 벡터는 희소하고(대부분 0으로 채워집니다) 고차원입니다.

(어휘 사전에 있는 단어의 수와 차원이 같습니다).

반면 단어 임베딩은 저차원의 실수형 벡터입니다(희소 벡터의 반대인 밀집 벡터입니다).

원-핫 인코딩으로 얻은 단어 벡터와 달리 단어 임베딩은 데이터로부터 학습됩니다.

보통 256차원, 512차원 또는 큰 어휘 사전을 다룰 때는 1,024차원의 단어 임베딩을 사용합니다.

반면 원-핫 인코딩은 (20,000개의 토큰으로 이루어진 어휘 사전을 만들려면) 20,000차원 또는 그 이상의 벡터일 경우가 많습니다.

따라서 단어 임베딩이 더 많은 정보를 적은 차원에 저장합니다.

 

Feature Selection(특성 선택)

데이터에 있는 특성 중에서 학습에 필요한 특성을 선택하는 것

특성의 개수가 무작정 많다고 해서 좋은 것이 아니다. 그저 많기만 하면 모델을 overfitting이 일어나게 만드는 것이다.

 

Feature Extraction(특성 추출)

데이터에 있는 특성들을 조합/결합하여 새로운 특성을 만드는 것.

 새로운 샘플에서 흥미로운 특성을 뽑아내는

 

합성곱층만 재사용하는 이유 (특성추출)

합성곱 층에 의해 학습된 표현이 완전 연결 분류기보다 더 일반적이어서 재사용 가능하다. 컨브넷의 특성 맵은 이미지를 일반적인 컨셉의 존재 여부를 기록한 것이기에 컴퓨터 비전 문제에 상관없이 유용하게 사용할 수 있다.

완전 연결 분류기에서 학습한 것은 모델이 훈련한 클래스 집합에만 특화되있고, 분류기는 전체 사진에 어떤 클래스가 존재할 확률만 가지고 있어서 객체의 공간적 개념 정보를 담지 않고 있다.

컨브넷의 경우 특성 추출은 사전에 훈련된 네트워크의 합성곱 기반층을 선택해 새로운 데이터를 통과시키고 그 출력으로 새로운 분류기를 훈련합니다.

모델의 하위 층 : 지역적, 일반적인 특성맵 (색깔, 질감 등)

모델의 상위 층 : 좀 더 추상적인 개념. (고양이 눈, 귀 등)

 

컨브넷에 하위층들은 좀 더 일반적이고 재사용 가능한 특성들을 인코딩하고, 상위 층들은 좀 더 특화된 특성을 인코딩한다. 새로운 문제에 재활용하도록 수정이 필요한 것은 특화된, 구체적인 특성이라 상위층만 조정한다.

또한 훈련되는 파라미터가 많을수록 오버피팅이 일어나기 쉬움으로 고양이나 강아지 선택과 같이 작은 데이터셋으로 전부 훈련하는 것은 위험하다.

 

정규화하는 이유

Standardization하면 학습을 더 빨리하고 지역 최적의 상태에 빠지게 될 가능성 줄임.

또한, 표준화 된 입력을 통해 Gradient Descent 및 Bayesian estimation을 보다 편리하게 수행 할 수 있습니다.

 

CNN에서 가중치 업데이트 방법

Mean(loss값)과 렐루함수의 미분값(0 or 1)과 컨볼루션에서 들어오는 인풋값을 곱하고

이를 필터의 가중치에 더하여 구하는 것이다.

 

시각화 분석

하위층의 활성화에는 초기 사진에 있는 거의 모든 정보가 유지됩니다.

상위 층으로 갈수록 활성화는 점점 더 추상적으로 되고 시각적으로 이해하기 어려워집니다. '고양이 귀'와 '고양이 눈'과 같이 고수준의 개념을 인코딩하기 시작합니다. 상위 층의 표현은 이미지의 시각적 콘텐츠에 관한 정보가 점점 줄어들고 이미지의 클래스에 관한 정보가 점점 증가합니다.

비어 있는 활성화가 층이 깊어짐에 따라 늘어납니다. 첫 번째 층에서는 모든 필터가 입력 이미지에 활성화되었지만 층을 올라가면서 활성화되지 않는 필터들이 생깁니다. 필터에 인코딩된 패턴이 입력 이미지에 나타나지 않았다는 것을 의미입니다.

 

특정 합성곱 층의 한 필터의 값을 최대화하는 손실 함수를 정의하는 것

cnn에서 경사상승법 Gradient Ascent 하는 이유

Loss가 최대가 되는 파라미터를 찾는 방법으로, Loss가 클수록 중요한 Feature들을 확대(부각)하여 볼 수 있고, 이를 통해 뉴런을 최대로 활성화 시키는 합성 이미지를 만들수 있고, 해당 레이어에서 발생한 액티베이션을 시각화 하는데 도움을 준다.

즉, 특정 필터의 response 극대화, 특정 필터에서 무슨일이 일어나고있는지 시각화 할 수 있음.

 

특징맵(Feature Map)이란

입력 이미지에서 고유한 특징을 부각하게 시킨 이미지

 

히트맵이란

이미지의 어느 부분이 컨브넷의 최종 분류 결정에 기여하는지, 이미지에 특정 물체가 있는 위치를 가르키는 것.

 

Grad-CAM으로 히트맵 만듬.

입력 이미지가 주어지면 합성곱 층에 있는 특성 맵의 출력을 추출합니다. 그 다음 특성 맵의 모든 채널의 출력에 채널에 대한 클래스의 그래디언트 평균을 곱합니다.

즉, 입력 이미지가 각 채널을 활성화하는 정도'에 대한 공간적인 맵을 '클래스에 대한 각 채널의 중요도'로 가중치를 부여하여 '입력 이미지가 클래스를 활성화하는 정도'에 대한 공간적인 맵을 만드는 것입니다.

 

CNN Grads 기울기 중요성. CNN에서의 모델 학습.

필터의 가중치가 강화되는게 중요함.

컨볼루션 마지막 레이어와 타겟 이미지의 아웃풋 사이의 기울기를 구하는 것.

728x90