2022/04/15

jungkwanlee·2022년 4월 15일
0

코딩일지

목록 보기
18/108

1) 학습한 내용

ANN(인공 뉴럴 네트워크 : Artificial Neural Network)

위에서 설명한 머신러닝의 한 분야인 딥러닝은 인공신경망(Artificial Neural Network)를 기초로 하고 있다. 인공신경망이라고 불리는 ANN은 사람의 신경망 원리와 구조를 모방하여 만든 기계학습 알고리즘이다. 인간의 뇌에서 뉴런들이 어떤 신호, 자극 등을 받고, 그 자극이 어떠한 임계값을 넘어서면 결과 신호를 전달하는 과정에서 착안한 것이다.

ANN은 입력 값을 이용하여 인공 뉴런의 출력 값을 계산하고, 인공 뉴런이 계산한 출력 값과 사용자가 기대하는 출력 값을 비교한다. 이때 기대하는 출력 값을 생성할 수 있도록 가중치를 조절한다. 그러나 ANN은 이러한 학습 과정에서 최적의 파라미터를 찾기 어렵고 학습 시간이 너무 느리다는 문제가 있다.

DNN(딥 뉴럴 네트워크 : Deep Neural Network)

ANN기법의 여러 문제가 해결되면서 모델 내 은닉층을 많이 늘려서 학습의 결과를 향상시키는 방법이 등장하였고 이를 DNN(Deep Neural Network)라고 한다. DNN은 은닉층을 2개 이상 지닌 학습 방법을 뜻한다. 컴퓨터가 스스로 분류레이블을 만들어 내고 공간을 왜곡하고 데이터를 구분짓는 과정을 반복하여 최적의 구분선을 도출해낸다. 많은 데이터와 반복학습이 필요하며 사전학습과 오류역전파 기법을 통해 현재 널리 사용되고 있다. 그리고 DNN을 응용한 알고리즘이 바로 CNN, RNN이다. (이 외에도 LSTM, GRU 등이 있다.)

CNN(합성곱신경망 : Convolution Neural Network)

기존의 방식은 데이터에서 지식을 추출해 학습이 이루어졌지만, CNN은 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조다. CNN은 사람의 시신경 구조를 모방한 것으로, 데이터를 feature로 추출하여 이 feature들의 패턴을 파악하는 구조다. feature 추출은 Convolution 과정과 Pooling 과정을 통해 진행된다. CNN은 Convolution Layer와 Pooling Layer를 복합적으로 구성하여 알고리즘을 만든다.
이미지를 인식하기 위해 패턴을 찾는데 유용하다. 데이터에서 직접 학습하고 패턴을 사용해 이밎를 분류하기에 수동으로 추출할 필요가 없다. 이러한 장점 때문에 자율 주행자동차, 얼굴 인식과 같은 객체인식이나 computer vision이 필요한 분야에 많이 사용된다.

Convolution: 데이터를 추출하는 과정으로 데이터에 각 성분의 인접 성분을 조사해 특징을 파악합니다. 여기서 도출된 특징을 추상화하여 특정 층으로 압축하며 이렇게 도출된 층을 Convolution Layer라고 부른다.

Pooling: Convolution과정을 거친 Layer의 사이즈를 줄이는 과정이다. 데이터 사이즈를 줄여 노이즈를 없애고 일괄적인 feature를 제공한다. 보통 Convolution 과정에서 만들어진 feature의 가장 큰 값만 가져와 사이즈를 줄이는 데, 이것을 max pooling이라고 한다.
from keras import layers
from keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu',input_shape=(28,28,1)))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPool2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.summary()
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 26, 26, 32)        320       
                                                                 
 max_pooling2d (MaxPooling2D  (None, 13, 13, 32)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 11, 11, 64)        18496     
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 5, 5, 64)         0         
 2D)                                                             
                                                                 
 conv2d_2 (Conv2D)           (None, 3, 3, 64)          36928     
                                                                 
=================================================================
Total params: 55,744
Trainable params: 55,744
Non-trainable params: 0
_________________________________________________________________
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.summary()
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 26, 26, 32)        320       
                                                                 
 max_pooling2d (MaxPooling2D  (None, 13, 13, 32)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 11, 11, 64)        18496     
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 5, 5, 64)         0         
 2D)                                                             
                                                                 
 conv2d_2 (Conv2D)           (None, 3, 3, 64)          36928     
                                                                 
 flatten (Flatten)           (None, 576)               0         
                                                                 
 dense (Dense)               (None, 64)                36928     
                                                                 
 dense_1 (Dense)             (None, 10)                650       
                                                                 
=================================================================
Total params: 93,322
Trainable params: 93,322
Non-trainable params: 0
_________________________________________________________________
from keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

(train_images, train_labels),(test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000,28,28,1))
train_images = train_images.astype('float32') /255

test_images = test_images.reshape(10000,28,28,1)
test_images = test_images.astype('float32') / 255

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)
test_loss, test_acc = model.evaluate(test_images, test_labels)
test_acc

RNN(순환신경망 : Recurrent Neural Network)

RNN은 입출력을 시퀀스 단위로 처리하는 시퀀스 모델로, 앞서 나온 신경망은 은닉층에서 활성화 함수를 지난 모든 값은 오직 출력층 방향으로만 향했다.

그러나 RNN은 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로 보내고, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징이 있다. 이 순환구조를 이용하여 과거의 학습을 W(weight)를 통해 현재 학습에 반영한다. 기존의 지속적이고 반복적이며 순차적인 데이터 학습의 한계를 해결한 알고리즘으로, 현재의 학습과 과거의 학습의 연결이 가능하다.

출처 : 머신러닝 딥러닝 알고리즘을 소개합니다.

영화 리뷰 분류

IMDB 데이터셋 인터넷 영화 데이터베이스로 가져온 양극단의 리뷰 50000개 training data 25000개와 test data 25000개로 나눠져 있음 MNIST처럼 keras에 기본으로 포함되어 있다. 데이터는 전처리 되어 있어서 포함되어 있는 단어들이 모두 숫자로 변환되어 있음.

영화 리뷰 분류: 이진 분류 예제

데이터의 준비 신경망에 숫자 리스트를 바로 주입할 수 없음. 원 핫 인코딩을 사용해서 10000 차원의 벡터로 변환해서 사용

소프트맥스 함수(Softmax function)

소프트맥스 함수는 로지스틱 함수의 다차원 일반화이다. 다항 로지스틱 회귀에서 쓰이고, 인공신경망에서 확률분포를 얻기 위한 마지막 활성함수로 많이 사용된다. 이름과 달리 최댓값(max) 함수를 매끄럽거나 부드럽게 한 것이 아니라, 최댓값의 인수인 원핫 형태의 arg max 함수를 매끄럽게 한 것이다. 그 계산 방법은 입력값을 자연로그의 밑을 밑으로 한 지수 함수를 취한 뒤 그 지수함수의 합으로 나눠주는 것이다.
conv2d

2) 학습내용 중 어려웠던 점

코딩을 하면 간혹가다가 똑같이 코드를 작성했는데, 내가 쓴 코드가 작동하지 않는 경우가 발생하기도 한다. 강사가 쓴 코드와 똑같이 작성했는데 이런 문제가 발생하면 난처해지는 경우가 있는데 이 경우는 오타가 치면 발생하는 일이다. 문제는 오타가 나오면 오타 찾느라고 시간이 지나가 버리는 경우가 있다.

3) 해결방법

만약 코딩을 하다가 뭔가 막히거나 잘못된다면 강사가 작성한 코드를 복사해서 붙여넣기를 했었다. 아니면, 다른 백업본을 만들어서 미리 준비해둬야 한다.

4) 학습소감

이번 수업도 코딩을 통해서 수업이 진행되었다. 동영상 강좌를 보고 복습을 해서 이번 달 말에 올 평가나 준비해야겠다.

0개의 댓글