멋쟁이 사자처럼 AI 스쿨 TIL-44

김영민·2022년 12월 5일
0

QnA

  1. 회귀 모델이라는 것을 모델이 어떻게 알 수 있을까요?
    => loss 에 손실함수를 작성하게 되면 어떤 문제인지 알 수 있습니다.

  2. 멀티클래스 예측값이 나왔을 때 가장 큰 인덱스를 반환하는 넘파이 메서드는 무엇일까요?
    => np.argmax() 를 통해 가장 큰 인덱스 값을 반환받아 해당 클래스의 답으로 사용

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

  4. softmax 와 sigmoid 의 차이는 무엇일까요?
    => softmax 는 n개의 확률값을 반환하고 전체의 합은 1이 됩니다.
    => 2개 중에 하나를 예측할 때는 softmax 를 사용할 수도 있기는 하지만 보통 sigmoid 를 사용합니다.
    => 소프트 맥스 함수는 다중분류(보통 3개 이상)에 사용되며, 반환된 확률값의 합이 1입니다.
    시그모이드는 이진분류에 사용되며, 0과 1 사이의 확률 값을 반환하여 임계값을 기준으로 분류합니다

  5. learning_rate 는 무엇일까요?
    => 학습률을 의미하며, 경사하강법에서 한 발자국 이동하기 위한 step size를 의미합니다. 학습률이 클수록 손실함수의 최솟값을 빨리 찾을 수 있으나 발산의 우려가 있고 너무 작으면 학습이 지나치게 오래걸리는 단점이 있습니다.

  6. DNN 을 사용할 때의 입력과 CNN을 사용할 때 입력의 차이?
    (이미지 높이, 이미지 너비, 컬러 채널)
    => ndim 을 출력해 보면 3차원으로 나옵니다.

  7. MNIST(28, 28, 1) 로 3차원입니다. cifar10과 input_shape 에 어떤 차이가 있을까요?
    =>컬러채널

  8. 패딩을 어떤 특징이 있을까요? 왜 패딩을 사용할까요?
    => 이미지 가장자리 모서리 부분의 특징을 좀 더 학습할 수 있습니다.

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

  10. 피처맵이 relu 활성화 함수를 통과한 것을 무엇이라고 부를까요?
    => 액티베이션 맵

  11. 피처맵을 만드는 이유가 무엇일까요?
    => 피처가 어떤 특징을 갖고 있는지 학습시키기 위해

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

  13. padding 해주면 어떤 효과가 있을까요?
    =>

  • 가장자리 모서리 부분의 특징을 더 학습할 수 있다
  • 이미지가 줄어드는 것을 방지

딥러닝

합성곱 신경망(Convolutional Neural Network, CNN)

CNN + DNN

EX)

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

합성곱 신경망의 별명

합성곱 신경망의 별명 => 피처 자동 추출기 그러면 어떻게 피처를 자동으로 추출할까요?
=> 필터(filters)를 랜덤하게 여러 장 만듭니다. 각 필터의 사이즈는 kernel_size 로 정합니다.
=> 필터를 이미지에 통과시켜서 합성곱 연산을 하여 결과가 나오면 그 결과로 특징을 추출합니다.
=> 필터에는 랜덤하게 만들다 보면 1자 모양도 있을 수 있고 / 모양도 있을 수 있고 O, ㅁ 이런 여러 패턴을
랜덤하게 만들 수있겠죠. 그리고 그 패턴을 통과시켜서 그 패턴이 얼마나 있는지 확인해 볼 수 있겠죠.
이런 패턴을 여러 장 만든다 => filters => 각 필터의 사이즈 kernel_size라 부릅니다.

패딩

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

  • 기본값이 Dense는 units이지만 Conv2D 에서는 가장 앞에 있는 기본 파라미터가 filters입니다.

kernel_size 는 어떻게 될까요?

  • (3, 3)

액티베이션 맵

활성화 함수를 통과한 것을 액티베이션맵이라고 부릅니다.

피처맵

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

Pooling

Pooling => 이미지 크기를 줄여 계산을 효율적으로 하고 데이터를 압축하는 효과가 있기 때문에 오버피팅을 방지해 주기도 합니다. 이미지를 추상화 해주기 때문에 너무 자세히 학습하지 않도록해서 오버피팅이 방지되게 됩니다.

효과 : 계산효율성, 과대적합을 예방
대체적으로 컬러이미지에서는 MaxPooling 을 가장 많이 사용하는 편입니다.
흑백이미지에서는 MinPooling 을 사용하기도 합니다.

  • MaxPooling 은 가장 큰 값을 반환,
  • AveragePooling 은 평균 값 반환,
  • MinPooling 은 최솟값 반환

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는 필터의 이동 보폭을 조정하기도 합니다.

구성요소

(height, width, filters)

CNN, DNN의 가장 큰 차이

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

conv2d 층

conv2D가 하는 일은 이미지-대-이미지 변환입니다.
4D(NHWC) 이미지 텐서를 또 다른 4D 이미지 텐서로 바꿉니다. (합성곱 층이 특성을 추출하는 기능을 가지고 있기 때문에 합성곱 층의 출력을 일반적으로 특성맵(feature map) 이라고 부릅니다.)
하지만 기존과 높이, 너비, 채널 개수는 달라질 수 있습니다. (이름이 conv2D인데 4D 텐서를 다룬다는 것이 이상해 보일 수 도 있지만, 배치차원과 채널 차원은 부가적인 부분이라는 것을 유념해야합니다)

좀 더 직관적으로 설명하자면 합성곱 층은 이미지를 흐리게 하거나 선명하게 만드는 간단한 '포토샵 필터 묶음'으로도 이해할 수 있습니다.
이런 효과들은 입력 받은 이미지 위를 작은 픽셀 조각(합성곱 커널 또는 간단히 커널이라고 부릅니다)이 슬라이딩하는 2D 합성곱으로 만들어지게 됩니다. 슬라이딩 위치마다 커널이 입력 이미지의 겹치는 부분과 픽셀별로 곱해집니다. 그리고 이 픽셀별 곱셈이 모두 더해져서 출력 이미지의 한 픽셀이 됩니다.

profile
배운걸 다 흡수하는 제로민

0개의 댓글