[TIL] 22.12.05

문종현·2022년 12월 5일
0

TIL

목록 보기
52/119
post-custom-banner

👉 오늘 한 일

  • DNN 복습

DNN 복습

  • 사이킷런의 train_test_split() 으로 데이터셋을 나눌 수도 있지만 pd.sample() 로도 나눌 수 있음

🤔출력층에 activation function을 지정하지 않았을 때 회귀 혹은 분류 모델이라는 것을 모델이 어떻게 알 수 있을까?

  • loss function을 보고 알 수 있음

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

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

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

  • softmax 는 n개의 확률값을 반환하고 전체의 합은 1이 되며 보통 다중 분류에 사용함
  • sigmoid 는 1개의 확률값을 반환하는데 그 확률값이 임계값보다 큰지 작은지를 판단. 이진분류에 사용함

출력층, compile 의 loss 를 보고 분류인지 회귀인지, 이진분류인지, 멀티클래스인지 판단해 볼 수 있도록 계속 연습해보기!

💡optimizer 는 문자열로 지정해서 사용할 수도 있지만 직접 메서드를 불러와서 사용하면 학습율을 조정할 수 있음

🤔learning_rate 는 무엇일까?

  • 학습율. 경사하강법에서 한 발자국 이동하기 위한 step size를 의미함. 학습률이 클수록 손실함수의 최솟값을 빨리 찾을 수 있으나 발산의 우려가 있고 너무 작으면 학습이 지나치게 오래걸리는 단점이 있음

CNN(Convolutional Neural Network)

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

  • DNN에서는 하나의 출력값을 위해 각각 다른 가중치들이 사용됨 (대신, 입력값들이 모두 동일함)
  • CNN은 하나의 출력값에 같은 가중치들이 사용됨 (대신, 입력값들이 매번 바뀜).

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

💡핵심 키워드 : Conv, Pooling(Max) + DNN

  • 핵심 요소 : 필터, 합성곱층, 풀링층(특징 추출 영역) + 완전 연결 계층(클래스 분류 영역)

(image_height, image_width, color_channels) 에서 color_channels 은 0, 1, 2 번째 값을 가져올 수 있음(RGB)

🤔CNN은 어떻게 피처를 자동으로 추출할까?

  • 필터(filters)를 랜덤하게 여러 장 만들어줌. 각 필터의 사이즈는 kernel_size 로 정함.
  • 필터를 이미지에 통과시켜서 합성곱 연산을 하여 결과가 나오면 그 결과로 특징을 추출함.
  • 필터에는 랜덤하게 만들다 보면 1자 모양도 있을 수 있고 / 모양도 있을 수 있고 O, ㅁ 이런 여러 패턴을 랜덤하게 만들 수 있음. 그리고 그 패턴을 통과시켜서 그 패턴이 얼마나 있는지 확인해 볼 수 있음.
  • 이런 패턴을 여러 장 만든다 == filters의 개수
  • 각 필터의 사이즈 == kernel_size

🤔패딩(Padding)의 특징? 왜 사용할까?

  • 이미지 가장자리 모서리 부분의 특징을 좀 더 학습할 수 있음. 이들을 학습시키기 위해 사용
  • 이미지가 줄어드는 것을 방지하기 위해 사용하기도 함
  • 성능, 단순성 및 계산 효율성 때문에 가장 일반적으로 사용되는 방법은 제로 패딩 방법
    • 입력 가장자리 주위에 대칭적으로 0을 추가

CNN의 작동 원리 이해를 돕기 위한 사이트
https://poloclub.github.io/cnn-explainer/

💡 컬러 채널(Channel)

  • 이미지 픽셀 하나하나는 실수(float)이며, 이미지 형태(shape)는 (높이, 폭, 컬러채널)로 구성
  • 컬러 사진은 천연색을 표현하기 위해 각 픽셀을 RGB 3개의 실수로 표현한 3차원 데이터로 3개의 채널로 구성
    • e.g. (39,31,3)
  • 흑백 사진은 흑백 명암만을 표현하는 2차원 데이터로 1개 채널로 구성
    • e.g. (39,31,1)
  • 입력 데이터에는 한 개 이상의 필터가 적용되며, 1개 필터는 특징맵(Feature Map)의 채널이 됨
  • 합성곱층(Convolution Layer)에 n개의 필터가 적용된다면 출력 데이터는 n개의 채널을 생성

합성곱(Convolution)

  • 데이터의 특징을 추출하는 과정으로 필터를 사용하여 각 영역의 인접 데이터를 조사해 특징을 파악하여 한 장으로 도출함

    • 여기서 도출된 한 장을 합성곱층(Convolution layer)이라고 함.(합성곱 처리 결과로부터 피처맵을 생성)
  • 이미지의 특정 부분을 추상화하여 특정 층으로 표현함

    • 하나의 압축 과정으로 파라미터의 개수를 효과적으로 축소시킬 수 있음
  • 구조는 필터(Filter)와 활성화함수(Activation Function)으로 구성됨

    • 필터 : 특징(feature)이 데이터에 있는지 없는지 검출하여 가중치 부여(만약 데이터가 있다면 1, 없다면 0)
    • 활성화함수 : 특징 유무를 수치화하기 위해 비선형 값으로 바꿔주는 함수(필터로 분류된 데이터가 대상)

📚Tensorflow API

tf.keras.layers.Conv2D(
    filters, kernel_size, strides=(1, 1), padding='valid', input_shape=(28, 28, 1),
    data_format=None, dilation_rate=(1, 1), groups=1, activation=None,
    use_bias=True, kernel_initializer='glorot_uniform',
    bias_initializer='zeros', kernel_regularizer=None,
    bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
    bias_constraint=None, **kwargs)

💡 풀링(Pooling)

풀링 : 합성곱층에서 받은 최종 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조함

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

  • 풀링 레이어를 처리하는 방법: Max Pooling(최대값)과 Average Pooling(평균값), Min Pooling(최소값)

  • 컬러 이미지에서는 MaxPooling 을 가장 많이 사용하는 편

    • 흑백 이미지는 MinPooling 을 사용하기도 함

풀링층과 합성곱층을 비교해보면

  • 학습대상 파라미터(필터)가 없음
  • 풀링층를 통과하면 행렬의 크기 감소
  • 풀링층를 통한 채널 수 변경 없음

📚Tensorflow API

tf.keras.layers.MaxPool2D(
    pool_size=(2, 2), strides=None, padding='valid', data_format=None,
    **kwargs)

🤔필터와 커널의 차이?

필터 : 이미지에서 특징을 분리해 내는 기능
커널 : 필터를 이미지에 통과해서 합성곱 연산을 할 때 사용되는 필터의 사이즈

📌오늘의 회고

  • 사실(Fact) : CNN의 작동 원리와 구성 요소를 학습했다.
  • 느낌(Feeling) : CNN explainer를 통해 학습되는 과정을 직접 보니까 조금 더 직관적이었지만 용어 이해나 학습 과정을 한 번에 이해하기가 힘들었다.
  • 교훈(Finding) : 실습 코드를 통해 복습해보면서 다시 점검 해봐야겠다.
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글