221205 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의
❓ 회귀 모델이라는 것을 모델이 어떻게 알 수 있을까?
◾ loss 에 손실함수를 작성하게 되면 어떤 문제인지 알 수 있습니다.
🦁 그럼 분류에서도 activation function을 지정 안하면 출력층을 Dense(1) 로 입력할 수 있을까.
◾ 분류에서도 activation 지정하지 않아도 loss 를 보고 판단하게 된다. 901파일은 이진분류이지만 출력층의 유닛을 1로 했다.
◾ 하지만 분류 문제는 binary, 멀티클래스인지 명시적으로 지정해 주는게 좀 더 코드를 읽고 해석하기 좋다. 되도록이면 혼란을 줄이기 위해 명시적으로 지정해준다.
🦁 분류에서 출력층 활성함수를 시그모이드로 하면 출력층 유닛은 2로 하면 될까?
◾ sigmoid 는 1개로 해주어야 확률값으로 출력을 받아 특정 임계값보다 크냐작냐로 binary 값을 만들어서 판단한다.
❓ 멀티클래스 예측값이 나왔을 때 가장 큰 인덱스를 반환하는 넘파이 메서드는 무엇일까요?
◾ np.argmax() 를 통해 가장 큰 값의 인덱스를 반환받아 해당 클래스의 답으로 사용
❓ softmax 와 sigmoid 의 차이
◾ 소프트맥스 일 때 2개의 확률을 반환하고 반환된 값의 전체 합은 1이고, 시그모이드 둘 중 하나를 예측할 때 1개의 출력값을 출력한다.
◾ softmax 는 n개의 확률값을 반환하고 전체의 합은 1이 된다.
◾ 2개 중에 하나를 예측할 때는 softmax 를 사용할 수도 있기는 하지만 보통 sigmoid 를 사용한다.
◾ sigmoid 는 1개의 확률값이 반환되는데 그 확률값이 임계값보다 큰지 작은지를 판단합니다.
🔥 복습을 해본다면, 출력층, compile 의 loss 를 보면 분류인지 회귀인지, 이진분류인지, 멀티클래스인지 판단해 볼 수 있도록 계속 연습!
❓ learning_rate 는 무엇일까?
◾ 학습률을 의미하며, 경사하강법에서 한 발자국 이동하기 위한 step size.
◾ 학습률이 클수록 손실함수의 최솟값을 빨리 찾을 수 있으나 발산의 우려가 있고 너무 작으면 학습이 지나치게 오래걸리는 단점.
https://www.tensorflow.org/tutorials/images/cnn
❓ DNN 을 사용할 때의 입력과 CNN을 사용할 때 입력의 차이?
◾ input shape (이미지 높이, 이미지 너비, 컬러 채널) : 컬러채널 추가
◾ 흑백은 채널이 1개인데, 컬러 이미지는 채널이 3개
◾ (R,G,B) 3개의 채널
높이와 너비 차원은 네트워크가 깊어질수록 감소하는 경향을 가진다.
32->64 깊어질수록 shape는 감소
🔥 합성곱 신경망(Convolutional Neural Network, CNN) 의 핵심 키워드! Conv, Pooling(Max)!
CNN + DNN
❓ MNIST(28, 28, 1) 로 3차원이다. cifar10과 input_shape 에 어떤 차이가 있을까?
◾ cifar10은 컬러 채널이 3개라서 input_shape=(32, 32, 3)
❓ 인쇄에서 사용하는 컬러는 무엇일까?
◾ CMYK 🟦🟥🟨⬛ cyan, margenta, yellow, black
◾ RGB는 빨강 초록 파랑
https://poloclub.github.io/cnn-explainer/
❓ 합성곱 신경망의 별명 => 피처 자동 추출기
어떻게 피처를 자동으로 추출할까?
◾ "필터(filters)를 랜덤하게 여러 장 만듭니다. 각 필터의 사이즈는 kernel_size 로 정합니다.
=> 필터를 이미지에 통과시켜서 합성곱 연산을 하여 결과가 나오면 그 결과로 특징을 추출합니다.
=> 필터에는 랜덤하게 만들다 보면 1자 모양도 있을 수 있고 / 모양도 있을 수 있고 O, ㅁ 이런 여러 패턴을
랜덤하게 만들 수있겠죠. 그리고 그 패턴을 통과시켜서 그 패턴이 얼마나 있는지 확인해 볼 수 있겠죠.
이런 패턴을 여러 장 만든다 => filters => 각 필터의 사이즈 kernel_size라 부릅니다."

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

❓ filter는 10. 커널의 설정값은 ? 3*3
(64, 64) => (62, 62) 된걸로도 유추 가능
64 - 62 + 1 + 패딩

❓ 10장의 피처가 나왔는데 이걸 무엇이라고 부를까?
◾ 피처맵 : 컨볼루션 결과로 나온 output
❓ 피처맵이 relu 활성화 함수를 통과한 것을 무엇이라고 부를까요?
◾ 액티베이션 맵 : 활성화 함수를 통과한 것
❓ MaxPooling 을 적용하면 어떻게 달라지나?
❓ MaxPooling 을 적용하면 어떤 효과가 있을까?
대체적으로 컬러이미지에서는 MaxPooling 을 많이 사용. 흑백이미지에서는 MinPooling 을 사용하기도 한다.
MaxPooling 은 가장 큰 값을 반환,
AveragePooling 은 평균 값 반환,
MinPooling 은 최솟값 반환
Pooling => 이미지 크기를 줄여 계산을 효율적으로 하고 데이터를 압축하는 효과가 있기 때문에 오버피팅을 방지해 주기도 하다. 이미지를 추상화 해주기 때문에 너무 자세히 학습하지 않도록해서 오버피팅이 방지되게 한다.
1) Convolution 연산을 하면 필터(filters, kernel_size에 해당하는 filters 개수만큼) 을 통과시켜서 filters 개수만큼 피처맵을 생성한다.
CNN의 별명 : 피처자동추출기
비정형 이미지를 입력했을 때, 이미지를 전처리 하지 않고 그대로 넣어주면 알아서 피처맵을 생성한다. 피처맵은 피처가 어떤 특징을 갖고 있는지를 나타낸다.
ex) 선, 동그란 모양 등
다양한 모양을 랜덤하게 생성해서 통과시키면 해당 특징이 있는지를 학습하게 하는게 Convolution 연산.
2) Activation Function(활성화함수) 을 통과시켜서 output 을 액티베이션맵을 생성한다.
3) Pooling 에는 Max, Average, Min 등 여러 방법이 있는데, 보통 MaxPooling 을 주로 사용한다.
4) CNN 관련 논문을 보면 이 층을 얼마나 깊게 쌓는지에 대한 논문이 있다. VGG16, VGG19 등은 층을 16개, 19개 만큼 깊게 만든 것을 의미. 30~50층까지, 100층 정도 쌓기도 한다. 층의 수를 모델의 이름에 붙이기도 한다.
-> 과거에 비해 GPU 등의 연산을 더 많이 지원하기 때문에 연산이 빨라져서.
5) TF API 는 다음의 방법으로 사용한다.
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)))
6) Padding, Stride 등을 사용해서 입력과 출력 사이즈를 조정하거나, Stride 는 필터의 이동 보폭을 조정하기도 한다.
❓ 피처맵을 만드는 이유? 왜 컨볼루션 연산을 할까? DNN 을 이미지 데이터에 사용했을 때 단점?
◾ 인접 공간에 대한 정보를 잃어버리게 된다. flatten() 으로 1차원 벡터 형태로 주입을 해야 하기 때문에.
◾ 1차원 형태로 주입을 해주면, 입력값이 커서 계산이 오래 걸린다.
◾ 컨볼루션, 풀링 연산을 하게 되면 데이터의 공간적인 특징을 학습하여 어떤 패턴이 있는지를 알게 된다.
◾ 풀링을 통해 데이터를 압축하면 데이터의 용량이 줄고, 추상화를 하기 때문에 너무 자세히 학습하지 않는다. 오버피팅을 방지한다.

결국은 1차원으로 완전밀집연결층(fully connected, DenseNN, Fully-connected NN) 에 주입하게 된다.
CNN, DNN의 가장 큰 차이는 바로 1차원으로 flatten 해서 넣어주는게 아니라 Conv, Pooling 연산을 통해 특징을 학습하고 압축한 결과를 flatten 해서 DNN 에 넣어준다.
padding 설정하면 입력받은 값이 output 으로 나온다.
필터는 이미지에서 특징을 분리해 내는 기능을 하고,
필터를 이미지에 통과해서 합성곱 연산을 하는데, 이 합성곱에 사용되는 커널의 크기를 kernel_size라고 한다.
8/10문제
2. CNN 의 합성곱(Convolution) 을 구성하는 핵심요소
CNN 의 영역 - 특징 추출 영역 -> Flatten 레이어 -> 클래스 분류 영역
어떤 과정을 나타내는가?
Activation Map 을 만든다.
-> 이게 Maxpooling 이었다면 압축하는 거니까 output이 확 작아져야 한다. 이미지에서는 output 의 변화가 없기 때문에 액티베이션 맵 과정이 맞다.
