STUDY LOG/Kaggle

Intro to Deep Learning(1)

Jinwang Mok 2021. 9. 28. 23:40

하나의 뉴런

딥 러닝의 기본이 되는 선형 유닛에 대해 배워봅시다.

 

딥 러닝의 세계에 오신 것을 환영합니다!

(이 글은 캐글의 Intro to Deep Learning 강의를 번역한 것입니다. 글 하단의 출처를 통해 캐글 사이트에 방문하시면, 캐글 노트북을 통해 직접 모델을 만드실 수 도 있으니 한번쯤 방문해보시는 것을 추천드립니다.)

 

캐글의 딥 러닝 코스에 오신 것을 환영합니다! 여기에서 여러분의 심층 신경망 모델을 만드는 것을 시작할 때 필요한 것들을 배우실 수 있습니다. Keras와 Tensorflow를 통해 다음과 같은 내용을 배우게 될 것입니다.

  • 완전 연결fully-connected 신경망 아키텍쳐를 만드는 방법
  • 신경망을 전통적인 기계학습 문제인 회귀regression와 분류classification에 적용하는 법
  • 확률적 경사 하강법Stochastic Gradient Descent(SGD)으로 신경망을 학습시키는 방법
  • 드롭아웃dropout, 배치 정규화batch normalization 등 다른 기법들로 품질을 향상시키는 방법

튜토리얼에서는 위 주제들에 대해 풍부한 예제로 소개할 것이고, exercise에서는 위 주제들에 대해 더 깊이있는 탐구와 실제 데이터셋에 적용해볼 것입니다.

 

자, 시작합시다!

 

딥러닝이란 무엇인가?

최근 몇년동안 인공지능 분야에서 가장 인상깊은 발전들 중 하나는 딥러닝 분야입니다. 자연어 번역, 이미지 인식, 게임은 모두 딥러닝 모델이 인간 수준에 가깝거나 초월하는 업무입니다.

 

그래서, 딥러닝이란 무엇일까요? 딥러닝은 깊은 연산들이 쌓여진 것으로 특징지어지는 기계 학습 접근법입니다. 이 연산의 깊이는 딥러닝 모델이 실제 세계의 어려운 데이터셋이 가진 복잡하고 계층적인 패턴을 풀 수 있게 도와줍니다.

 

그 힘과 크기를 통해 신경망은 딥러닝 모델의 결정적인 모델이 되었습니다. 신경망은 뉴런으로 구성되어있는데, 각각의 뉴런은 개별적으로 단지 간단한 연산만을 수행합니다. 대신 신경망의 힘은 이 뉴런들이 형성할 수 있는 연결의 복잡성에서 나옵니다.

 

(즉, 딥러닝의 결정적 모델은 신경망이며, 신경망은 뉴런으로 이루어져있고, 각 뉴런은 간단한 연산만 수행하지만 이 뉴런들을 복잡하게 연결하므로써 딥러닝의 진짜 힘이 발현된다고 정리할 수 있겠습니다.)

 

선형 유닛

자, 그럼 그럼 신경망의 기반이 되는 요소부터 시작해보죠. 개별 뉴런이요! 하나의 입력 값이 있는 하나의 뉴런(또는 유닛)은 아래와 같이 시각화해볼 수 있습니다.

선형 유닛 : y = wx + b

입력은 x 입니다. x 와 뉴런의 연결connection에는 가중치weight가 있는데 그것이 바로 w 입니다. 값이 연결을 통해 흘러갈 때, 그 값에 해당 연결의 가중치를 곱해야 합니다. x 의 경우, 뉴런에 도착하는 값은 w * x 인 것이지요. 신경망은 그 가중치를 수정하는 것을 통해 "학습"합니다.

 

b 는 특별한 종류의 가중치인데, 이를 바이어스bias(또는 편중치)라고 부릅니다. 바이어스는 바이어스와 연관된 입력 데이터를 가지지 않아 대신에 다이어그램에는 1을 넣어줬습니다. 따라서, 뉴런에 도착하는 값은 그냥 b(1 * b = b 니까)인 것이지요. 바이어스는 뉴런의 입력값과 독립적으로 출력값을 수정하도록 도와줍니다.

 

y 는 최종적으로 뉴런이 출력하는 값입니다. 출력 값을 얻기 위해서 뉴런은 연결을 통해 전달 받은 모든 값들을 더합니다. 이 뉴런의 활성activation은 y = w * x + b 또는 식으로 나타내면 y = wx + b 입니다.

y = wx + b가 익숙해 보이시나요?

그건 그냥 한 줄의 등식이기 때문이겠죠! 이건 기울기-절편 등식으로 w는 기울기, b는 y 절편인 등식입니다.

 

예시 - 모델로써의 선형 유닛

각각의 뉴런은 더 큰 망network의 일부로만 동작하지만, 하나의 뉴런 모델을 기준으로 시작하는 것이 종종 유용합니다. 하나의 뉴런으로 만들어진 모델들은 선형 모델입니다.

 

80 Cereals 같은 데이터셋에서 어떻게 작동할지 생각해봅시다. 'sugars'(1인분 당 그램)을 입력으로, 'calories'(1인분 당 칼로리)를 출력으로 하는 모델을 학습시키면, 여러분은 아마 바이어스 b = 90, 가중치 w = 2.5 를 찾을 수 있을 겁니다. 이를 통해 아래와 같이 1인분 당 5그램의 설탕이 들어있는 시리얼의 칼로리를 추측할 수 있습니다.

그리고, 여러분의 식과 비교하면, calories = 2.5 * 5 + 90 = 102.5 니까 예상과 맞군요!

 

다중 입력

80 Cereals 데이터셋은 'sugars' 말고도 많은 특징(열)들을 가지고 있습니다. 만약 여러분의 모델을 'fiber'나 'protein' 같은 특징들을 포함시켜 확장시키려면 어떻게 해야할까요? 쉽습니다. 그냥 추가될 특징 하나마다 입력 연결을 뉴런에 더 추가하면 됩니다. 출력 값을 알아내기 위해서 각각의 입력 값에 해당 연결의 가중치를 곱하고 그 값을 모두 더하면 됩니다.

3개의 입력을 가진 선형 유닛

이 뉴런의 공식은 y = w0x0 + w1x1 + w2x2 + b 가 될 것입니다. 두개의 입력을 가진 선형 유닛은 좌표평면에 맞춰질 것이고, 그보다 많은 입력을 가지는 유닛은 초평명에 맞춰질 것입니다.

케라스로 선형 유닛 만들기

케라스로 가장 쉽게 모델을 만드는 방법은 keras.Sequential을 이용하는 것입니다. 이것은 신경망을 레이어layer의 누적stack으로 만듭니다. 위의 그림과 같은 모델을 dense 레이어를 사용해 만들 수 있습니다.(dense에 대해서는 다음 강의에서 배웁니다.)

 

여러분은 아래의 코드와 같이 'sugar', 'fiber', 'protein' 세 개의 입력을 받고, 'calories'라는 하나의 출력을 만들도록 모델을 정의할 수 있습니다.

from tensorflow import keras
from tensorflow.keras import layers

# 1개의 선형 유닛으로 구성된 network 만들기
model = keras.Sequential([
	layers.Dense(units=1, input_shape=[3])
])

units라는 첫 번째 인자로 원하는 출력의 개수를 정의할 수 있습니다. 이 경우, 'calories'라는 하나의 예측만을 출력으로 원하므로, units=1 으로 설정합니다.

 

input_shape라는 두 번째 인자로 입력의 차원을 Keras에게 알려줄 수 있습니다. input_shape=[3] 로 설정한 것은 모델이 입력으로 3가지 특징('sugar', 'fiber', 'protein')을 받을 것이라는 것을 알려주는 것입니다.

 

왜 input_shape가 파이썬 리스트 자료형인가요?

여러분이 이 코스에서 사용할 데이터는 Pandas의 dataframe처럼 테이블 형태입니다. 여러분은 데이터셋의 각 특징feature에 대하여 하나의 입력을 가질 것입니다. 특징은 열 별로 정렬되므로 항상 input_shape=[num_columns]를 사용합니다. 여튼 Keras가 리스트를 사용하는 이유는 더 복잡한 데이터셋을 사용할 수 있게 허용하기 위함입니다. 예를 들어 이미지 데이터에는 [높이, 너비, 채널]의 3차원이 필요할 수 있습니다.

이렇게 캐글(Kaggle)의 Intro to Deep Learning을 번역하며 공부해봤습니다.

 

오늘 배운 내용을 요약하자면,

  • 딥러닝은 뉴런으로 이루어진 신경망 구조다.
  • 하나의 뉴런(선형 유닛)은 각각의 입력에 그 연결에 해당하는 가중치를 곱한 값을 받아, 이렇게 입력*가중치의 값과 바이어스를 모두 더해 출력을 만들어내는 연산만 한다.
  • 비교적 간단한 연산 하나만을 담당하는 뉴런이지만, 이 뉴런을 신경망 형태로 구성했을 때 딥러닝이 엄청난 성능을 보여준다.

혹시라도 잘못된 내용이 있다면, 말씀해주시면 감사하곘습니다.

 

출처 : https://www.kaggle.com/ryanholbrook/a-single-neuron

'STUDY LOG > Kaggle' 카테고리의 다른 글

Intro to Deep Learning(3)  (0) 2021.09.30
Intro to Deep Learning(2)  (0) 2021.09.29
데이터 사이언티스트를 위한 핵심 기술들_캐글(Kaggle) Discussion 번역(1)  (0) 2021.09.26
Pandas(2)  (0) 2021.09.26
Pandas(1)  (0) 2021.09.26