TIL/딥러닝

12월 5일 딥러닝 CNN 기초

monawa 2022. 12. 6.
728x90

회귀 모델이라는 것을 모델이 어떻게 알 수 있을까요?

A: loss 에 손실함수를 작성하게 되면 어떤 문제인지 알 수 있습니다.
(분류에서도 activation 지정하지 않아도 loss 를 보고 판단하게 됩니다.
분류 문제는 binary, 멀티클래스인지 명시적으로 지정해 주는게 좀 더 코드를 읽고 해석하기 좋습니다.
하지만 되도록이면 지정해 주세요.)

 

 

분류에서 출력층 활성함수를 시그모이드로한다면 출력층 유닛은 2로 하면 되나요?

A: sigmoid 는 1개로 해주어야 확률값으로 출력을 받아 특정 임계값보다 크냐작냐로 binary 값을 만들어서 판단합니다.

분류에서 units이 2개라면 softmax 로 반환받는게 맞습니다.

이 때는 둘 중에 확률 값이 높은 값을 선택해서 사용합니다.

 

 

멀티클래스 예측값이 나왔을 때 가장 큰 인덱스를 반환하는 넘파이 메서드는 무엇일까요?

np.argmax() 를 통해 가장 큰 인덱스 값을 반환받아 해당 클래스의 답으로 사용합니다.

 

 

[0.1, 0.1, 0.7, 0.1] 이렇게 예측했다면 np.argmax() 로 반환되는 값은 무엇일까요?

2

 

 

softmax 와 sigmoid 의 차이는 무엇일까요?

softmax  sigmoid 
n개의 확률값을 반환하고 전체의 합은 1이 됩니다.  1개의 확률값이 반환되는데 그 확률값이 임계값보다 큰지 작은지를 판단합니다.
2개 중에 하나를 예측할 때는 softmax 를 사용할 수도 있기는 하지만 보통 sigmoid 를 사용합니다.

복습을 해본다면, 출력층, compile 의 loss 를 보면 분류인지 회귀인지, 이진분류인지, 멀티클래스인지 판단해 볼 수 있도록 계속 연습해 보세요!

 

 

learning_rates 는 무엇일까요?

학습률을 의미하며, 경사하강법에서 한 발자국 이동하기 위한 step size를 의미합니다.

학습률이 클수록 손실함수의 최솟값을 빨리 찾을 수 있으나 발산의 우려가 있고 너무 작으면 학습이 지나치게 오래걸리는 단점이 있습니다.

=> 적당하게 설정해 주는게 좋습니다.

 


오늘 새로 배우게 되는 핵심적인 내용은 합성곱 층을 만드는 방법입니다 !


 

DNN 을 사용할 때의 입력과 CNN을 사용할 때 입력의 차이?

(이미지 높이, 이미지 너비, 컬러 채널)

cnn 은 input shape 가 튜플형태로 되어있습니다

DNN 도 튜플 형태로 입력할 수도 있습니다!

ndim 을 출력해 보면 3차원으로 나옵니다.

 

 

ANN DNN CNN  차이

이름 ANN
인공신경망
DNN CNN
설명 모든 비선형 함수를 학습


모든 입력을 출력에 매핑하는 가중치를 학습할 수 있는 능력



ANN 문제 해결위해 은닉층 많이 늘려서 학습의 결과를 향상시키는 방법

2개 이상의 은닉층으로 학습(보통 Deep Learning은 3개 이상) 방법을 뜻합니다
 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조 

Convolution과정과 Pooling과정을 통해 진행
장점 활성화 함수는 네트워크에 비선형 속성 도입으로
입력과 출력 사이 복잡한 학습을 하는데 도움
연속형, 범주형 변수에 상관없이 모두 분석 가능하다.

입력 변수들 간의 비선형 조합이 가능하다. 

예측력이 다른 머신러닝 기법들에 비해 상대적으로 우수한 경우가 많다.

feature extraction이 자동으로 수행된다. (변수 선택의 번거로움을 줄여준다. )

Data양이 많아지면 성능이 계속 좋아진다.
타 알고리즘 대비 빠른 학습속도

데이터 분할 분석을 통한 오버피팅기능성 감소 

텍스트 분류시 다수의 단어 조합에 대한 패턴 고려가능
단점 학습과정에서 파라미터 최적값 찾기 어려움

Overfitting에 따른 문제

학습시간이 너무 느리다 
신경망이 복잡할 경우 작동하는데 시간이 오래 걸린다.

변수들을 일정한 순서나 방식으로 넣는 것이 아니기 때문에 결과가 일정하지 않다.

가중치의 의미를 정확히 해석하기 어렵기에 결과해석이 어렵습니다 
하이퍼 파라미터설정에 따라 
과도한 데이터 손실에 따른 언더피팅 발생가능 
 적용분야   DNN을 응용하여
CNN, RNN, LSTM, GRU 발전
이미지 인식 
텍스트 분류

 

합성곱 신경망(Convolutional Neural Network, CNN) 의 핵심 키워드!

Conv, Pooling(Max)!

 


CNN 작동원리 체험하기 

https://poloclub.github.io/cnn-explainer/

 

합성곱 신경망(CNN)의 별명 => 피처 자동 추출기

 

 

그러면 어떻게 피처를 자동으로 추출할까요?

=> 필터(filters)를 랜덤하게 여러 장 만듭니다. 각 필터의 사이즈는 kernel_size 로 정합니다.

=> 필터를 이미지에 통과시켜서 합성곱 연산을 하여 결과가 나오면 그 결과로 특징을 추출합니다.

=> 필터에는 랜덤하게 만들다 보면 1자 모양도 있을 수 있고 / 모양도 있을 수 있고 O, ㅁ 이런 여러 패턴을랜덤하게 만들 수있겠죠.

그리고 그 패턴을 통과시켜서 그 패턴이 얼마나 있는지 확인해 볼 수 있습니다 

 

이런 패턴을 여러 장 만든다 => filters => 각 필터의 사이즈 kernel_size라 부릅니다.

 

 

패딩을 어떤 특징이 있을까요? 왜 패딩을 사용할까요?

⇒ 이미지 가장자리 모서리 부분의 특징을 좀 더 학습할 수 있습니다.

이미지가 줄어드는 것을 방지하기 위해 사용하기도 하지만 가장자리 모서리 부분의 특징을 좀 더 학습할 수 있습니다.

 

(패딩을 1로 커널사이즈를 3x3 으로 사용하면 입력과 출력값이 같아지게 됩니다.)

 

 

아래 사진에서 kernel_size 는 어떻게 될까요?

3*3

⇒ 필터 내부의 사이즈를 보고 커널의 설정값을 알 수 있습니다.

 

 

 

10장의 피처가 나왔는데 이걸 무엇이라고 부를까요?

컨볼루션 레이어

 

 

컨볼루션 레이어를 통과한 결과 10개의 피처를 무엇이라고 부를까요?

피처맵

 

 

 

피처맵이 relu 활성화 함수를 통과한 것을 무엇이라고 부를까요?

액티베이션 맵

 

 

 

 

컨볼루션 결과로 나온 Output 은 피처맵

 

 

MaxPooling 을 적용하면 어떤 효과가 있을까요?

계산효율성

 


 

컬러이미지 흑백이미지
MaxPooling  MinPooling
  • MaxPooling 은 가장 큰 값을 반환,
  • AveragePooling 은 평균 값 반환,
  • MinPooling 은 최솟값 반환
  • Pooling => 이미지 크기를 줄여 계산을 효율적으로 하고 데이터를 압축하는 효과가 있기 때문에 오버피팅을 방지해 주기도 합니다. 이미지를 추상화 해주기 때문에 너무 자세히 학습하지 않도록해서 오버피팅이 방지되게 됩니다.
  1. Convolution 연산을 하면 필터(filters, kernel_size에 해당하는 filters 개수만큼)를 통과시켜서 filters 개수만큼 피처맵을 생성합니다.
    => CNN 의 별명이 피처자동추출기 이기도 합니다.
    비정형 이미지를 입력했을 때 이미지를 전처리 하지 않고 그대로 넣어주게 되면 알아서 피처맵을 생성합니다.
    피처맵은 피처가 어떤 특징을 갖고 있는지를 나타냅니다.
    선이 있는지, ), O, 1, , 다양한 모양을 랜덤하게 생성해서 통과 시키면 해당 특징이 있는지를 학습하게 하는게 Convolution 연산입니다.

  2. 피처맵 Output에 Activation Function (활성화함수)을 통과시켜서 액티베이션맵을 생성합니다.
    => relu 등을 사용하게 되면 출력값에 활성화 함수를 적용한 액티베이션맵을 반환합니다.

  3. Pooling 에는 Max, Average, Min 등 여러 방법이 있는데, 보통 MaxPooling 을 주로 사용합니다.
    흑백이미지에서는 MinPooling 을 사용하기도 합니다.
    MaxPooling 은 가장 큰 값을 반환,
    AveragePooling 은 평균 값 반환,
    MinPooling 은 최솟값 반환 Pooling
    => 이미지 크기를 줄여 계산을 효율적으로 하고 데이터를 압축하는 효과가 있기 때문에 오버피팅을 방지해 주기도 합니다. 이미지를 추상화 해주기 때문에 너무 자세히 학습하지 않도록해서 오버피팅이 방지되게 됩니다.

  4. CNN 관련 논문을 보면 이 층을 얼마나 깊게 쌓는지에 대한 논문이 있습니다.
    VGG16, VGG19 등은 층을 16개, 19개 만큼 깊게 만든 것을 의미합니다. 30~50층까지 쌓기도 하고 100층 정도 쌓기도 합니다. 층의 수를 모델의 이름에 붙이기도 합니다.
    => 과거에 비해 GPU 등의 연산을 더 많이 지원하기 때문에 연산이 빨라진 덕분이기도 합니다.

  5. TF API 는 다음의 방법으로 사용합니다.
model.add(layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))

6. Padding, Stride 등을 사용해서 입력과 출력사이즈를 조정한다든지, Stride는 필터의 이동 보폭을 조정하기도 합니다.

 

이모든것 위의 코드 2줄을 위한 개념설명!

 


이 결과를 무엇이라 부를까요?

=> 피처맵

 

그렇다면 피처맵을 만드는 이유가 무엇일까요?

컨볼루션 필터 크기만큼의 피처맵을 생성하기때문에 입력데이터의 지역 특성을 학습한다,
또한 컨볼루션 필터의 가중치를 공유하기때문에 학습된 특징이 나타나면 위치에 상관없이 인식한다.
(학습된 특징에 대한 패턴을 매칭하는 것)

 

 

DNN을 이미지 데이터에 사용했을 때 어떤 단점이 있을까요?

인접 픽셀간의 상관관계가 무시된다

 

  1. flatten() 으로 1차원 벡터 형태로 주입을 해야 하기 때문에 인접 공간에 대한 정보를 잃어버리게 됩니다.
  2. 1차원 형태로 주입을 해주게 되면 입력값이 커서 계산이 오래 걸립니다.
  3. Conv과 Pooling 연산을 하게 되면 데이터의 공간적인 특징을 학습하여 어떤 패턴이 있는지를 알게 되며
  4. Pooling 을 통해 데이터를 압축하면 데이터의 용량이 줄어들며, 추상화를 하기 때문에 너무 자세히 학습하지 않게 됩니다. 오버피팅을 방지해 줍니다.

3,4은  → DNN 의 단점을 보완한 CNN의 특징

 


model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), 
                        activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))

위 코드에서 피처맵은 몇 개 나오나요?

32 (필터수=피처맵수)

 

위에서 입력한 이미지의 채널 수는 몇 개 일까요?

3개 (input shape = RGB )

⇒ x,x,3 컬러 /x,x,1 흑백

 

네트워크에 넣어주는 것은 동일하지만 CNN 에서는 미리 특징을 추출하는 층을 갖습니다.

CNN, DNN의 가장 큰 차이는
바로 1차원으로 flatten 해서 넣어주는게 아니라 Conv, Pooling 연산을 통해 특징을 학습하고 압축한 결과를 flatten 해서 DNN 에 넣어줍니다.

 

 

padding="same"  / padding 해주면 어떤 효과가 있을까요?

가장자리 데이터의 특징을 더 학습하며 가로 세로 길이를 늘리거나 유지시켜줍니다.

(이미지가 줄어드는 것을 방지)

 

 

이 예제에서 필터의 수는 몇 개 일까요?

(피처맵이 3장 나왔기 때문에 필터는 3개 입니다.)

 

필터와 커널의 차이가 무엇일까요?

필터는 이미지에서 특징을 분리해 내는 기능을 하고, 필터를 이미지에 통과해서 합성곱 연산을 하는데,

이 합성곱에 사용되는 커널의 크기를 kernel_size라고 합니다.


오늘의 오답노트 

CNN이 기존 완전 연결 계층(Fully Connected Neural Network)와 비교하여 가진 차별성을 가지게 한 핵심요소

  • 합성곱층(Convolution layer)
  • 풀링층(Pooling layer)
  • 필터(Filter)

CNN의 합성곱(Convolution)을 구성하는 핵심요소는

  • 필터(Filter) & 활성화함수(Activation Function)

 


CNN의 영역 중 합성곱층에서 입력데이터에 필터를 적용하여 활성화 함수 반영하여 특징을 추출하고,
풀링층으로 특징을 강조하며 여러 겹 쌓은 형태영역

  • 특징 추출 영역

이미지의 특징을 찾아내기 위한 공용 파라미터로 학습의 대상이며, 
합성곱의 가중치에 해당하는 CNN의 합성곱 요소는 무엇일까요?

  • 필터(filter)는 입력 데이터를 지정된 간격으로 순회하며 채널별로 합성곱을 하고 특징맵(모든 채널의 합성곱의 합)을 생성합니다

필터를 적용하는 간격을 뜻하는 용어는 무엇일까요?

스트라이드(stride) =1로 지정한다면 필터를 한 번에 한 픽셀씩 이동합니다.

스트라이드란 ?

  • stride=1이면 필터를 한 번에 한 픽셀씩 이동한다.
  • 필터(filter)는 입력 데이터를 stride로 지정한 간격으로 순회하면서 합성곱을 계산한다.
  • 스트라이드(stride)는 필터를 적용하는 간격을 의미한다.

합성곱 연산을 다음 이미지와 같이 진행 할 때 filters의 개수는 몇 개 일까요?

10개!


다음의 과정은 Activation Map을 만든다.

 


 DNN과 다른 CNN의 차이

  • flatten() 으로 1차원 벡터 형태로 주입을 해야 하기 때문에 인접 공간에 대한 정보를 잃어버리게 됩니다.
  • Conv과 Pooling 연산을 하게 되면 데이터의 공간적인 특징을 학습하여 어떤 패턴이 있는지를 알게 됩니다.
  • Pooling 을 통해 데이터를 압축하면 데이터의 용량이 줄어들며, 추상화를 하기 때문에 너무 자세히 학습하지 않게 됩니다. 오버피팅을 방지해 줍니다.
  • 1차원 형태로 주입을 해주게 되면 입력값이 커서 계산이 오래 걸립니다.
728x90

댓글