본문 바로가기

Information/구글 텐서플로우 자격증 따기

[코세라 강좌] 1주차 - 이론

반응형

머신러닝이 지금까지의 전형적인 프로그래밍과 다른 점은?

머신러닝과 일반 프로그래밍과의 근본적인 차이점을 아주 잘 나타내주는 그림입니다.

 

우리가 지금까지 알고 있는 프로그래밍은 전부 그림의 위 쪽에 해당하는 방법이었습니다.  

 

사거리 도로에서 초록색과 빨간색이 켜지고 꺼지는 것도 어떤 규칙에 의해 프로그래밍된 것이고, 우리가 사용하고 있는 word 프로그램도 사용자가 키보드로 어떤 것을 칠 때 어떻게 화면에 나오게 하는 등 개발자가 코딩하는 어떤 'Rule'에 의해서 모든 것이 프로그래밍되는 것이었습니다.

 

프로그래밍이라는 것이, 'Rule'과 그 'Rule'에 의해 다뤄지는 'Data'에 의해 어떤 'Answers'가 나오는 것이지 다른 것도 있을 수 있을까요?

 


머신러닝은 어떤 데이터와 그 데이터가 어떤 것을 가리키는 지에 대한 답을 주면, 거기에서 어떤 규칙을 찾아냅니다. 

Rule과 Data에 의해 Answers가 나오는 구조가 아닙니다.

 

프로그래밍 파라다임 자체가 바뀐 것입니다. 

 

예를들어, 1~9까지의 이미지 데이터를 머신러닝으로 돌리면, 어떤 규칙이 나오고, 다시 이 규칙을 이용해서 어떤 숫자 이미지가 어떤 숫자를 가리키는지 알아낼 수가 있습니다. 

규칙을 누가 만드는 것이 아니라, 데이터로부터 일종의 규칙을 만들어 내는 것입니다.

 

전형적인 프로그래밍은 어떻게 프로그래밍했나하면(실제로 도로에서 차량 번호판을 읽는 프로그램은 아직까지도 전형적인 룰 방식이 쓰였었음), 어떤 이미지가 들어왔을 때 '1'이라는 모양의 이미지가 가지는 규칙을 찾고(개발자가), 또한 '2'라는 이미지가 가지는 규칙을 찾고(예를 들어, 1의 경우는 곡선이 없고, 2는 곡선이 있고 등) 해서 숫자를 구분하도록 개발자가 규칙을 찾아내서 프로그래밍해야 합니다.

 

반면에 머신러닝은 '1'인 이미지 여러 장과 '2'인 이미지 여러 장을 머신러닝 알고리즘으로 학습시키고 나면, '1'인 이미지를 1로 '2'인 이미지를 2로 인식하는 'Rule'이 자동으로 생성됩니다. 즉, 개발자가 그 'Rule'을 만들 필요가 없는 것이죠.

 


뉴럴 네트워크에서의 'Hello World'

 

이 코드를 이해하면 되는 것.

 

keras(케라스)

파이썬으로 구현된 딥러닝 라이브러리. 

 

layer(레이어)

 

Dense

레이어의 한 가지 종류로, 입력과 출력층의 모든 노드들이 연결되어 있는 레이어

 

Loss function

머신러닝 모델의 출력 값과 기댓값과의 차이. 즉, 오차

 

보통 평균 제곱 오차(mean squared error, mse)가 많이 쓰임. mse = 오차의 제곱에 대해 평균을 취한 것

 

Optimizer

손실 함수(Loss function)의 값을 최소화하는 방향으로 파라미터 값을 조정해서 최적의 값을 찾아내는 것. 

예를 들어 '확률적 경사 하강법' 등을 이용해서 손실 함수의 값의 최소화되게 함

(확률적 경사 하강법: Stochastic Gradient Descent, SGD)

 

model.fit

모델 학습시키는 함수

 

ephoc(에포크)

반복 학습시킬 횟수

1 ephoc는, 전체 데이터에 대해서 한 번 학습완료한 것을 의미

 

epoch, batch size, iteration은 아래 사이트 참조

 

[출처] 머신 러닝 - epoch, batch size, iteration의 의미|작성자 예비개발자

 


케라스 라이브러리를 이용해서 딥러닝을 하는 전형적인 케이스를 소개하고 있습니다. 

 

케라스를 이용해서 딥러닝 프로그래밍을 하는 방법을 개념화하면 다음과 같습니다. 

 


출처: https://tykimos.github.io/2017/01/27/Keras_Talk/

케라스의 가장 핵심적인 데이터 구조는 바로 모델입니다. 케라스에서 제공하는 시퀀스 모델로 원하는 레이어를 쉽게 순차적으로 쌓을 수 있습니다. 다중 출력이 필요하는 등 좀 더 복잡한 모델을 구성하려면 케라스 함수 API를 사용하면 됩니다. 케라스로 딥러닝 모델을 만들 때는 다음과 같은 순서로 작성합니다. 다른 딥러닝 라이브러리와 비슷한 순서이지만 훨씬 직관적이고 간결합니다.

  1. 데이터셋 생성하기
    • 원본 데이터를 불러오거나 시뮬레이션을 통해 데이터를 생성합니다.
    • 데이터로부터 훈련셋, 검증셋, 시험셋을 생성합니다.
    • 이 때 딥러닝 모델의 학습 및 평가를 할 수 있도록 포맷 변환을 합니다.
  2. 모델 구성하기
    • 시퀀스 모델을 생성한 뒤 필요한 레이어를 추가하여 구성합니다.
    • 좀 더 복잡한 모델이 필요할 때는 케라스 함수 API를 사용합니다.
  3. 모델 학습과정 설정하기
    • 학습하기 전에 학습에 대한 설정을 수행합니다.
    • 손실 함수 및 최적화 방법을 정의합니다.
    • 케라스에서는 compile() 함수를 사용합니다.
  4. 모델 학습시키기
    • 훈련셋을 이용하여 구성한 모델로 학습시킵니다.
    • 케라스에서는 fit() 함수를 사용합니다.
  5. 학습과정 살펴보기
    • 모델 학습 시 훈련셋, 검증셋의 손실 및 정확도를 측정합니다.
    • 반복횟수에 따른 손실 및 정확도 추이를 보면서 학습 상황을 판단합니다.
  6. 모델 평가하기
    • 준비된 시험셋으로 학습한 모델을 평가합니다.
    • 케라스에서는 evaluate() 함수를 사용합니다.
  7. 모델 사용하기
    • 임의의 입력으로 모델의 출력을 얻습니다.
    • 케라스에서는 predict() 함수를 사용합니다.

 

반응형