https://www.youtube.com/watch?v=a9REdNjdqYo
분류 ⇒ 다층 형태
CNN
[ Convolutional Layer ] → [ Fully Connected Neural Network ]
✔ 앞부분 = 특징 추출기
✔ 뒷부분 = 분류기
1. CNN의 기본 구조
CNN은 크게 두 부분으로 구성된다.
- Convolutional Layer (특징 추출 부분)
- Fully Connected Layer (분류 부분✔ 앞부분 = 특징 추출기
✔ 뒷부분 = 분류기
이미지 → 특징 추출 → 분류 → 확률 출력의 흐름으로 작동
2. Convolutional Layer (합성곱 층)
역할
이미지에서 중요한 특징을 자동으로 추출하는 역할을 한다.
예:
- 경계선
- 모서리
- 질감
- 눈, 코, 입과 같은 얼굴 특징
핵심 개념
- Filter(필터)
- 작은 행렬이 이미지를 이동하면서 특정 패턴을 감지한다.
- 특징 맵(Feature Map)
- 필터를 통과한 결과로 생성된 새로운 이미지
CNN은 사람이 직접 특징을 설계하지 않고
모델이 스스로 중요한 특징을 학습한다.
3. Pooling Layer
특징 맵의 크기를 줄여 계산량을 감소시키는 역할을 한다.
- Max Pooling: 가장 큰 값만 선택
- Average Pooling: 평균값 선택
공간 정보를 일부 줄이지만
중요한 특징은 유지한다.
4. Fully Connected Layer (완전 연결층)
Convolution Layer에서 추출된 특징을 기반으로
최종적으로 클래스를 분류하는 층이다.
일반적인 다층 퍼셉트론(MLP) 구조를 가진다.
5. 출력층과 활성화 함수
① 이진 분류
출력 노드 1개
활성화 함수: sigmoid
출력값 = y가 1일 확률
0일 확률은 1 - p 로 계산 가능
② 다중 분류
출력 노드 개수 = 클래스 개수
예:
설현 → 1000
지민 → 0100
초아 → 0010
혜정 → 0001
이를 원-핫 인코딩이라고 한다.
활성화 함수: Softmax
Softmax의 특징:
- 모든 확률의 합 = 1
- 각 클래스에 속할 확률 출력
예:
설현 : 0.90
지민 : 0.05
초아 : 0.03
혜정 : 0.02
6. CNN과 PCA의 차이
PCA
- 선형 차원 축소 기법
- 데이터 압축
- 공간 구조 정보 일부 손실
- 2차원 이미지를 1차원으로 줄이면 위아래, 좌우 정보 손실 발생
CNN
- 비선형 학습
- 공간 구조 유지
- 지역적 패턴 학습 가능
- 이미지 처리에 특화
따라서 이미지 분류에서는 PCA보다 CNN이 훨씬 적합하다.
7. 전체 동작 흐름 정리
이미지 입력
→ Convolution (특징 추출)
→ Pooling (크기 축소)
→ Flatten (1차원 변환)
→ Fully Connected Layer
→ Softmax
→ 확률 출력
8. 핵심 요약
- CNN은 이미지의 공간 구조를 유지하면서 특징을 자동 추출한다.
- Convolution Layer는 특징 추출, Fully Connected Layer는 분류 담당.
- 다중 분류에서는 출력 노드 수 = 클래스 수.
- 마지막 층에서는 Softmax를 사용해 확률을 출력한다.
- PCA는 선형 차원 축소, CNN은 비선형 특징 학습 모델이다.

활성을 결성하는게 맨 마지막 층 마지막 함수를 통해 나오는 y ⇒ 수치예측으로 사용
학습으의 결과를 확률로 내뱉대록 ( 무엇이 될 지에 대한 확률)
노드1개는 y가 1인 확률을 보여줌
y1, y2 경우에는 하나만 결정하면 나머지 하나가 나오므로 2개인 경우에는 사용 x
neural network가 분류를 하기 위한 층
1000 : 설현
0100: 지민
0010 : 초아
0001 : 혜정
convolutional layer
결합했을 떄 정확도가 올라가는 칼럼도 있다 ⇒ 이땐 추출 !
특성 정보를 특성화 해서 pca로 차원 축소
⇒ 사진에서 추출된 특징 (압축)
2차원이 가지고 있는 사진 정보가 누락되어버버림
1차원은 위아래의 정보가 누실되어버림
2교시
1. 벡터와 행렬의 기하학적 의미
수업 시간의 $wx + b$와 코사인 언급은 데이터가 공간상에서 어떻게 변하는지를 설명한 것입니다.
- 위치 이동 ($wx + b$): 가중치($w$)를 곱하고 편향($b$)을 더하는 것은 데이터를 공간상에서 이동시키거나 늘리는 선형 변환입니다.
- 회전과 코사인: 벡터에 코사인 값이 포함된 행렬을 곱하면 벡터가 회전합니다. 이미지 처리에서는 사물이 기울어져 있거나 회전되어 있어도 특징을 찾아내기 위한 수학적 배경이 됩니다.
- 의미 파악: 결국 이 수식들은 이미지라는 데이터 뭉치에서 우리가 원하는 **'의미 있는 특징'**만 골라내기 위해 데이터를 이리저리 돌려보고 변형해 보는 과정입니다.
2. 상관관계와 내적 (Dot Product)
이 부분이 이번 수업의 핵심인 것 같습니다. "왜 하필 행렬 곱(Convolution)을 하는가?"에 대한 답입니다.
- 상관관계 = 공분산 = 내적: 두 데이터가 얼마나 닮았는지(상관관계)를 통계에서는 공분산으로 보지만, **선형대수(행렬)에서는 '내적'**으로 계산합니다.
- 내적의 의미: 두 벡터의 방향이 일치할수록(닮을수록) 내적 값은 커집니다.
- 행렬 곱 = 내적의 반복: 이미지는 거대한 2차원 행렬입니다. 필터(작은 행렬)를 이미지 위에 대고 행렬 곱을 한다는 것은, **"필터의 모양이 이미지의 이 부분과 얼마나 닮았니?"**를 구간별로 계속 물어보는 과정입니다.
3. 필터(Filter)의 정체와 역할
"필터라는 이미지를 합성곱했다는 사실"에 대한 보충입니다.
- 일치 영역 확인: 필터가 '기울어진 선(/)' 모양이라면, 이미지에서 그 모양과 일치하는 부분에서만 큰 값이 출력됩니다. 즉, **"여기에 내가 찾는 특징이 있다!"**라고 외치는 지도를 만드는 것입니다.
- 특징 추출 (Feature Extraction): "이 픽셀이 얼마인가"가 중요한 게 아니라, "여기에 눈 모양이 있느냐 없느냐" 같은 **추상적인 특징(Feature)**을 확인하는 것이 목적입니다.
- 요약 정보: 원본의 미세한 픽셀 정보를 다 쓰는 대신, 필터를 통해 걸러진 핵심 정보(특징 맵)만 사용하기 때문에 학습 효율이 올라갑니다.
4. 왜 PCA보다 CNN인가? (공간 정보의 보존)
졸면서 적으신 '2차원 정보의 누락' 부분이 아주 중요합니다.
- PCA의 한계: 데이터를 1차원으로 쭉 펼쳐버리면(Flatten), 바로 옆에 있던 픽셀이 아주 멀리 떨어지게 됩니다. 위/아래 관계 정보가 완전히 깨져버리죠.
- CNN의 승리: CNN은 행렬 형태 그대로 연산하기 때문에 **"코 옆에 눈이 있고, 눈 위에 눈썹이 있다"**는 공간적인 위치 관계를 끝까지 유지하며 학습합니다.
5. 학습의 철학: "이게 있니?" vs "값이 얼마니?"
- 과거의 방식이 각 픽셀값($y$)이 결과에 주는 영향력을 계산하려 했다면, CNN은 **"이 특징(Feature)이 이 이미지에 존재하는가?"**라는 관점으로 접근합니다.
- 필터는 스스로 학습하며, 처음에는 단순한 선을 찾다가 뒤로 갈수록 복잡한 형태(바퀴, 창문, 얼굴 등)를 찾는 정교한 필터로 진화합니다.
⇒ "이미지(행렬)와 필터(행렬)를 내적(행렬 곱) 한다는 것은, 두 이미지 사이의 상관관계를 확인하여 특정 패턴이 어디에, 얼마나 있는지 찾아내는 과정이다."
3교시
컨볼루셔널 레이어 (Convolutional Layer)
사진에서 추출된 특징 = feature는 이미지 자체의 정보가 아니다
스스로 학습 ?
필터를 하나의 층에 여러개 사용할 수도 있고, 층 자체가 여러개 일 수도 있어서 → 다양한 피쳐 값 나옴
ex_ 자동차 판별 ⇒ 여러개의 필터 적용 → 뒤로 갈수록 예민한 조건
이렇게 컨볼루셔널 필터와 액티베이션 함수 (ReLU) 그리고 풀링 레이어를 반복적으로 조합하여 특징을 추출한다.아래 그림을 보면 여러개의 컨볼루셔널 필터(CONV)와 액티베이션 함수 (RELU)와 풀링 (POOL) 사용된것을 볼 수 있다

미리학습된 weight값을 쓸 때도 어디까지 사용할 것인지 설정할 수 있음 ⇒ 층별로 모듈화 되어있으니까
일부만 조절 .. 나머지는 동결시킨다는 .;



from tensorflow import keras
from tensorflow.keras import layers
inputs = keras.Input(shape=(28, 28, 1))
x = layers.Conv2D(filters=32, kernel_size=3, activation="relu")(inputs)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=64, kernel_size=3, activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=128, kernel_size=3, activation="relu")(x)
x = layers.Flatten()(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)
중간에 일차원으로 바꾸고 테라스를 만들게하고
구조르보고 모델 저의
연산이 많으면 갯수가 많아짐
x = layers.Conv2D(filters=32, kernel_size=3, activation="relu")(inputs)
⇒ 분석
- layers.Conv2D(...): "32개의 필터를 가진 컨볼루션 층"이라는 함수를 만듭니다.
- (...)(inputs): 그 함수에 inputs라는 데이터를 매개변수로 집어넣습니다.
- x: 그 결과값이 나옵니다. 이제 이 x를 다음 층의 입력으로 또 쓸 수 있겠죠?
층을 '함수'처럼 생각한 방법
input을 넣어줌으로써 연결
입력을 매개변수 전달해주는 것처럼
Sequential 모델은 model.add()를 통해 컨테이너 안에 층을 집어넣으면 지가 알아서 연결해 줍니다. 반면, 함수형 API는 컨테이너라는 바구니가 없습니다. 대신 개발자가 직접 입력값(inputs)을 다음 층에 인자로 전달해서 수동으로 연결 고리를 만듭니다.
비유하자면:
- 시퀀셜: 정해진 코스대로만 가야 하는 기차 (앞 칸 뒤에 무조건 다음 칸).
- 함수형 API: 내가 원하는 곳에 정거장을 만들고 길을 자유롭게 내는 자동차 내비게이션.
🔹 Sequential Model
레이어를 차례대로 쌓는 모델