본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

공부 시작

강의 종료

수강 인증

학습 인증샷

 

강의 후기

 

ch03-11. CNN 알고리즘

CNN 매번 딥러닝 공부할 때 마다 기초로 공부했지만,,,

볼 때 마다 새로워 다시 정리해보겠습니다.

 

이미지 행렬를 합축하여 새로운 feature matrix를 생성한다.

지역적 특성을 추출하는 데 사용된다.

 

그렇다면 이 특성을 추천시스템에 어떻게 활용할까

 

이미지 행렬에서 특성 추출

 

추천시스템은 user-item 간의 상호작용을 분석한다.

여기서 item에 비정형 데이터가 중요한 역할을 할 수 있는데 CNN을 활용하여 아이템에 feature를 추가해 정확도를 높일 수 있다.

 

상품의 이미지를 CNN을 통하여 분석하여 유사한 스타일이나 카테고리 feature를 만들어 상품을 추천할 수 있다.

 

기존의 행렬 기반 정형 데이터 추천(저차원적 특징 학습)에서 이미지 비디오 등 고차원 특징을 추출해 학습의 정확도를 높일 수 있다.

 

ch03-13. RNN 알고리즘

RNN(순환 신경망)

 

sequence 데이터

일련의 원소들이 특징 순서로 정렬된 데이터

ex) 클릭 이벤트 로그, 구매이력, 덱스트

-> 일반적인 MLP 구조로는 순서에 담겨있는 정보를 잡아내기 어려움

 

RNN은 어떻게 시간적 순서를 가진 데이터 처리에 특화되어있는가

=>

RNN은 각 시점에서 상태를 업데이트하며 작동한다.

현재 시점의 입력과 이전 시점의 상태가 결합되어 만들어진다.

이를 통해 RNN은 이전 데이터를 기억하고 현재 상태를 업데이트한다.

 

단점은 sequence가 길어질수록 과거의 정보가 희미해질 수 있다.

이를 해결하기위해 LSTM, GRU와 같은 변형된 RNN 구조가 등장했다.

 

추천시스템에서 RNN 활용

사용자의 행동 순서를 반영한 추천

이전의 행동이 현재의 행동에 영향을 미치기 때문에 이전의 상태를 반영하여 추천할 수 있다.

 

예를 들어 사용자가 A상품을 클릭한 후 B상품을 클릭했을 때 RNN은 이 데이터를 학습하여 다음에 어떤 상품을 클릭할 확률이 높은지 예측할 수 있게된다.

 

따라서 RNN은 추천시스템에서 시간적인 변화와 사용자 행동의 순서를 시간의 흐름에 맞게 예측할 수 있게한다.

 


 

아래는 CNN과 RNN의 파이썬 베이스라인 코드입니다.

# CNN을 활용한 이미지 분류

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 데이터 로드 및 전처리
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 데이터 reshape (CNN의 입력에 맞게)
x_train = x_train.reshape((x_train.shape[0], 28, 28, 1))
x_test = x_test.reshape((x_test.shape[0], 28, 28, 1))

# 데이터 정규화
x_train, x_test = x_train / 255.0, x_test / 255.0

# 레이블 원-핫 인코딩
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# CNN 모델 구성
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

# 모델 컴파일
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 모델 학습
model.fit(x_train, y_train, epochs=5, batch_size=64)

# 모델 평가
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_acc}')

 

 

 

 

 

# RNN을 활용한 시퀀스 예측 (숫자 예측)

import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models

# 시퀀스 데이터 생성 (간단한 예제: 0~99의 숫자)
x = np.array([[i+j for j in range(10)] for i in range(100)])
y = np.array([[i+10] for i in range(100)])

# 데이터 reshape (RNN의 입력 형식에 맞게)
x = x.reshape((x.shape[0], x.shape[1], 1))

# RNN 모델 구성
model = models.Sequential([
    layers.SimpleRNN(50, activation='relu', input_shape=(x.shape[1], 1)),
    layers.Dense(1)
])

# 모델 컴파일
model.compile(optimizer='adam', loss='mean_squared_error')

# 모델 학습
model.fit(x, y, epochs=20, batch_size=16)

# 예측
predictions = model.predict(x)

# 결과 출력
for i in range(10):
    print(f'Input: {x[i].flatten()} -> Prediction: {predictions[i]} -> Actual: {y[i]}')

 

 

 

숙제 :  CNN과 RNN과 결합한 모델의 강점과 활용.