본문 바로가기

DINOLEARNING

퍼셉트론 동작 【1】Deep Learning 시작하기_딥러닝이 알고 싶다! 퍼셉트론 동작 작성자 홍다혜 ghdek11@gmail.com / 이원재 wonway333@gmail.com 더보기
퍼셉트론이 마주친 장벽 【1】Deep Learning 시작하기_딥러닝이 알고 싶다! 퍼셉트론이 마주친 장벽 퍼셉트론은 출력 값이 1 또는 0이므로 선형 분류(linear classifier) 모델이라고 볼 수 있다. 선형 분류는 평면 상에 선을 긋고 그 선을 기준으로 A와 B로 분류하는 것을 말한다. 위의 그림에서 보다시피 2차원 ○과 □를 선으로 분류할 수 있는 문제를 선형 문제라고 한다. 그렇다면 다음 문제를 함께 생각해보자. 위 그림처럼 종이 위에 검은 점과 흰 점이 놓여 있다면 선 하나만을 이용해서 두 종류의 점을 분류할 수 있을까? 아무리 선을 그려보아도 선 하나만으로는 검은 점과 흰 점을 분류할 수 없을 것이다. 이것이 퍼셉트론의 한계로 많이 등장하는 XOR(exclusive OR) 문제다. XOR문제는 논리회로에 .. 더보기
딥러닝의 뿌리를 찾아서, 퍼셉트론은 누구인가? 【1】 Deep Learning 시작하기_딥러닝이 알고 싶다! 딥러닝의 뿌리를 찾아서, 퍼셉트론은 누구인가? 인공지능 연구진들은 ‘사람을 대신해서 문제를 해결하는 기계’를 만들기 위해 사람의 뇌 구조를 분석하고 이를 컴퓨터세계로 가져옴으로써 인공신경망을 만들 수 있을 것이라고 생각했다. 1957년 블랜트(Frank Rosenblatt)가 제안한 인공 뉴런인 퍼셉트론은 신경망(딥러닝)으로 나아가는데 중요한 아이디어가 되었다. 이번장에서는 딥러닝의 핵심이 되는 인공신경망의 구성원인 인공뉴런 즉, 퍼셉트론의 동작원리를 간단히 소개하겠다. 먼저 퍼셉트론의 동작을 이해하기 위해 생물학적 신경망을 보도록 하자. 사람의 뇌는 뉴런이라고 불리는 신경세포로 구성되어 있다. 뉴런은 다수의 입력이 합산되어 하나의 통로로 출.. 더보기
[머신러닝] 케라스로 RNN 순환 층 구현하기 (파이썬 코드) 1. 케라스의 순환 층(RNN) RNN은 Recurrent Neural NEtwork의 약자로, 시퀀스 모델인 순한 신경망을 의미합니다. 즉, RNN은 입력과 출력을 시퀀스 단위로 처리하는 모델인데요, RNN은 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로 보낼 때, 은닉층 노드의 다음 계산 입력으로도 결과값을 보낸다는 특징을 갖고 있습니다. 한편, 케라스로 이러한 순환 층을 구현할 수 있는데요, SimpleRNN 라이브러리를 이용하여 구현할 수 있습니다. SimpleRNN은 케라스에 있는 모든 순환 층과 동일하게 두 가지 모드로 실행할 수 있는데요, 전체 시퀀스를 반환하거나 입력 시퀀스에 대한 마지막 출력만 반환할 수 있습니다. 그렇다면, 간단한 RNN 모델을 만들어보겠습니다. f.. 더보기
[머신러닝] 데이터(레이블)를 벡터로 변환하는 방법 (파이썬 코드) 다중 분류 문제를 해결하기 위한 학습 모델을 만들 때, 학습에 사용할 데이터를 준비하는 단계에서 데이터를 벡터로 변환하는 과정을 거쳐야 하는데요, 아래와 같이 데이터를 벡터로 만들어주는 함수를 만들어서 사용할 수 있습니다. import numpy as np def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results 만약, train_data = [1, 42, 323, 34,66, 85]라는 정수 인코딩이 된 데이터가 있다고 가정할 때, 이 .. 더보기
[자연어 처리] RNN 텍스트 분류 모델, 어떠한 활성화 함수 & 손실 함수를 사용하는게 좋을까요? - RNN으로 텍스트 분류 모델을 만들 때, 어떠한 활성화 함수와 손실 함수를 사용하는 게 좋을까요? RNN 구조를 이용한 텍스트 분류 문제는 모든 time step(시점 수 = 던어 수)에 대해 입력을 받고, 최종 출력 층에서 활성화 함수를 통해 하나의 답을 고르는 문제인데요, 이때 출력층에서 두 개의 선택지 중에서 답을 고르는 건지, 세 개 이상의 선택지에서 답을 고르는 건지에 따라 이진 분류 또는 다중 클래스 분류로 나누어집니다. 만약, 여기서 이진 분류의 문제로 해결을 하고 싶다면 활성화 함수는 Sigmoid 함수를, 손실 함수는 binary_crossentropy를 사용하는 것이 적절합니다. 반면, 다중 클래스 문제이 경우 활성화 함수를 Softmax, 손실함수를 categorical_cross.. 더보기
[머신러닝] GRU란? 케라스로 GRU 은닉층 추가하기 (코드) 1. GRU란? GRU(Gated Recurrent Unit)란 LSTM과 유사한 구조를 가지는 모델을 말하는데요, LSTM의 장기 의존성 문제에 대한 해결책을 유지하면서 은닉 상태를 업데이트하는 계산을 감소시킨 알고리즘을 말합니다. 또한 GRU의 가장 큰 특징은 출력게이트, 입력게이트, 삭제게이트를 가진 LSTM과 달리 업데이터 게이트와 리셋 게이트만 갖고 있다는 점입니다. LSTM과 GRU가 비슷한 구조를 가지고 있지만 어느 게 더 좋다고 말할 수는 없는데요, 다만 GRU에서 매개변수의 양이 적기 때문에 데이터의 양이 적을 땐 GRU를 사용하는 것이 좋고, 데이터의 양이 많다면 LSTM이 적절할 수 있습니다. 2. 케라스로 GRU 은닉층 추가하기 한편, 케라스를 이용해 GRU 은닉층을 추가하고 싶다면.. 더보기
[머신러닝] 의사결정나무 : 엔트로피, 지니 계수란? 1. 의사결정나무란? 결정트리(Decision Tree) 라고도 하는 의사결정 나무는 랜덤포레스트 앙상블 알고리즘의 베이스가 되는 알고리즘으로, Tree구조를 가진 알고리즘이라고 할 수 있습니다. 결정트리는 데이터를 분석하여 데이터 사이에 패턴을 예측 가능한 규칙들의 조합으로 나타내도록 합니다. 이처럼 결정터리는 이러한 학습 결과에 대하여 시각화를 통한 직관적인 이해가 가능하다는 것이 큰 장점입니다. 또한 랜덤포레스트 알고리즘도 결정 트리의 알고리즘을 기반으로 하는데요, 사용이 쉽고 성능이 매우 우수하다는 점에서 결정트리가 많이 사용된답니다. 2. 엔트로피란? 의사결정나무에서 엔트로피(Entropy)는 주요 매개변수 중 하나인데요, 무질서한 정도를 수치화 한 값을 말합니다. 즉, 불손도를 측정하는 지표로.. 더보기
[머신러닝] CNN 층에 dropout(드롭아웃) 추가하기 (텐서플로) Dropout(드롭아웃)은 랜덤으로 선택한 node만 학습시키고, 일부 node는 버리는 것을 말하는데요, 한 번의 학습 후 다음 학습 때 이 과정을 반복합니다. Dropout을 사용하면 은닉층이 많은 neural network에서 오버피팅 문제를 방지할 수 있다는 장점을 가지는데요, 텐서플로를 이용하여 만든 CNN 층에 드롭아웃 층을 추가하는 코드에 대해서 살펴보겠습니다. model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), act.. 더보기
[머신러닝] CNN(합성곱 신경망) 모델 만들기 (텐서플로 / 코드) 이번 글에서 텐서플로(tensorflow)를 이용하여 합성곱 층(CNN)을 만들어보도록 하겠습니다. 모델에 사용할 데이터는 텐서플로에서 제공하는 MNIST 데이터셋을 사용하도록 하겠습니다. 1. 텐서플로 import & 데이터셋 준비 먼저, tensorflow 라이브러리를 import 해준 뒤, 학습을 위한 데이터를 다운로드합니다. import tensorflow as tf from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() 이미지 데이터는 아래 코드처럼 28 x 28 형태의 shape으로 바꾸고, 픽셀 값을.. 더보기