머신러닝의 'Hello & World'를 소개합니다

1. 시작하기 전에

이 Codelab에서는 자바 또는 C++와 같은 언어로 명시적 규칙을 프로그래밍하는 대신 데이터로 학습된 시스템을 빌드하여 숫자 간의 관계를 추론하는 규칙을 추론하는 ML의 기본 사항을 알아봅니다.

다음 문제를 고려해 보세요. 피트니스 모니터링을 위해 활동 감지를 실행하는 시스템을 빌드하고 있습니다. 사용자가 걷는 속도에 액세스할 수 있고 조건부를 사용하여 해당 속도를 기반으로 활동을 추론하려고 할 수 있습니다.

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

다른 조건으로 실행되도록 확장할 수 있습니다.

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

최종 조건에서도 마찬가지로 사이클링을 감지할 수 있습니다.

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

이제 골프와 같은 활동을 포함할 때 어떤 일이 일어나는지 생각해 보세요. 활동을 판단하는 규칙을 작성하는 방법이 다소 명확하지 않습니다.

fc772abb6fee2804.png

// Now what?

골프 활동을 인식하는 프로그램을 작성하는 것은 매우 어렵습니다. 어떻게 해야 할까요? ML을 사용해 문제를 해결할 수 있습니다.

기본 요건

이 Codelab을 시작하기 전에 다음이 필요합니다.

  • Python에 대한 지식
  • 기본적인 프로그래밍 기술

학습할 내용

  • 머신러닝의 기초

빌드할 항목

  • 첫 머신러닝 모델

필요한 항목

TensorFlow를 사용하여 ML 모델을 만든 적이 없는 경우 필요한 모든 종속 항목이 포함된 브라우저 기반 환경인 Colaboratory를 사용할 수 있습니다. Colab에서 실행되는 나머지 Codelab용 코드를 찾을 수 있습니다.

다른 IDE를 사용하는 경우 Python이 설치되어 있는지 확인하세요. TensorFlow 및 NumPy 라이브러리도 필요합니다. 여기에서 TensorFlow에 관해 자세히 알아보고 설치하세요. NumPy를 여기에 설치합니다.

2. ML이란?

다음 다이어그램과 같이 앱을 빌드하는 기존 방법을 생각해 보세요.

C72f871306134e45.png

프로그래밍 규칙으로 규칙을 표현할 수 있습니다. 이들은 데이터에 기반하여 프로그램 작업을 제공하며, 프로그램은 답변**을 제공합니다.** 활동 감지의 경우 데이터(사용자 유형을 정의하기 위해 작성한 코드)가 데이터(사용자 및 이동 속도)를 기준으로 작업하여 걷고 있는지, 자전거를 타거나, 다른 일을 하고 있는지 등 사용자의 활동 상태를 판단하는 함수에서 반환되는 값을 반환합니다.

ML을 통해 활동 상태를 감지하는 프로세스는 매우 유사합니다. 축만 다릅니다.

9b85a337ee816e1b.png

규칙을 정의하여 프로그래밍 언어로 표현하려고 시도하는 대신 데이터와 함께 답변 (일반적으로 라벨이라고 함)을 제공하면 시스템에서 답변과 데이터의 관계를 결정하는 규칙을 추론합니다. 예를 들어 활동 감지 시나리오는 ML 컨텍스트에서 다음과 같이 표시될 수 있습니다.

6ff58697a85931f4.png

많은 데이터를 수집하여 '걷는 모습', '걷는 방법', '실행 중인 입찰 방식'과 같은 라벨을 지정합니다. 그런 다음 컴퓨터가 데이터에서 특정 활동을 나타내는 고유한 패턴이 무엇인지 판단하는 규칙을 추론할 수 있습니다.

이러한 접근 방식을 프로그래밍의 대안이 될 수 있을 뿐만 아니라 규칙 기반의 기존 프로그래밍 방식에서는 불가능했던 골프 시나리오와 같은 새로운 시나리오를 열 수도 있습니다.

기존 프로그래밍에서 코드는 일반적으로 프로그램이라고 하는 바이너리로 컴파일됩니다. ML에서는 데이터 및 라벨로 만드는 항목을 모델이라고 합니다.

이 다이어그램으로 돌아가면

53ff9e2cb511936e.png

그 결과는 런타임 시 다음과 같이 사용되는 모델이 될 수 있습니다.

693430bb4d7fa001.png

모델에 일부 데이터를 전달하면 모델은 학습에서 추론한 규칙을 사용하여(예: '걷거나 걷는 것'이나 '이것은 자전거와 유사한 것'이라고 함) 규칙을 사용합니다.

3. 첫 ML 모델 만들기

다음 숫자 집합을 고려하세요. 서로의 관계를 볼 수 있나요?

X:

-1

0

1

2번

3

4

예:

-2

1

4

7

10

13

이를 살펴보면 왼쪽에서 오른쪽으로 읽을 때 X 값이 1씩 증가하고 상응하는 Y 값이 3까지 증가하는 것을 알 수 있습니다. Y는 3배 더하기 빼기와 같다고 생각할 수 있습니다. X의 0을 살펴보면 Y가 1이고 Y=3X+1의 관계가 생깁니다.

즉, 코드를 사용하여 데이터 패턴을 찾아내도록 모델을 학습시킬 수 있는 것과 거의 같습니다.

이제 코드를 살펴보고 실행합니다.

동등한 작업을 수행하도록 신경망을 학습시키는 방법 데이터 사용 중 일련의 XY 집합을 공급하면 서로의 관계를 파악할 수 있어야 합니다.

가져오기

가져오기부터 시작하세요. 여기에서는 TensorFlow를 가져오고 tf를 쉽게 사용할 수 있도록 호출합니다.

그런 다음 데이터를 쉽고 빠르게 목록으로 표시하는 numpy라는 라이브러리를 가져옵니다.

신경망을 순차적 레이어 세트로 정의하는 프레임워크를 keras라고 하므로 가져오기합니다.

import tensorflow as tf
import numpy as np
from tensorflow import keras

신경망 정의 및 컴파일

다음으로 가장 간단한 신경망을 만듭니다. 레이어가 하나이고, 레이어에 뉴런이 하나 있으며, 입력 도형은 값이 하나뿐입니다.

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

그런 다음 신경망을 컴파일하는 코드를 작성합니다. 이렇게 하려면 lossoptimizer을 두 가지 함수로 지정해야 합니다.

이 예에서 숫자 사이의 관계는 Y=3X+1입니다.

컴퓨터가 이를 학습하려고 할 때 Y=10X+10으로 추측합니다. loss 함수는 알려진 답변을 기준으로 추측한 답변을 측정하고 답변이 얼마나 좋거나 나쁜지를 측정합니다.

다음으로 이 모델은 optimizer 함수를 사용하여 다시 추측합니다. 손실 함수의 결과에 따라 손실을 최소화하려고 합니다. 이제 Y=5X+5와 같은 결과가 나올 수 있습니다. 여전히 좋지 않은 결과가 나타났지만, 올바른 결과로 더 멀어졌으며 (손실은 적음)

이 모델은 에포크 수에 반복할 예정이며, 곧 여기에 표시될 것입니다.

먼저 손실에 mean_squared_error를 사용하고 옵티마이저에 스토크 경사하강법(sgd)을 사용하도록 지시하는 방법을 알아보겠습니다. 아직 수학 문제를 잘 이해하실 필요는 없지만 정답은 무엇인지 보실 수 있습니다.

시간이 지남에 따라 다양한 시나리오에 맞는 다양한 손실 및 최적화 도구 함수를 배우게 됩니다.

model.compile(optimizer='sgd', loss='mean_squared_error')

데이터 제공

다음으로 데이터를 공급합니다. 이 경우 앞에서 6개의 X와 6개의 Y 변수를 가져옵니다. 두 그래프의 관계는 Y=3X+1이므로 X는 -1, Y는 -2입니다.

NumPy라는 Python 라이브러리는 이를 위한 다양한 배열 유형 데이터 구조를 제공합니다. np.array[]를 사용하여 NumPy의 배열로 값을 지정합니다.

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

이제 신경망을 정의하는 데 필요한 모든 코드를 만들었습니다. 다음 단계는 이 숫자 간의 패턴을 추론하여 모델을 만드는 데 사용할 수 있는지 학습하는 것입니다.

4. 신경망 학습시키기

XY의 관계를 학습하는 신경망을 학습시키는 과정은 model.fit 호출에서 이루어집니다. 추측을 하기 전에 루프를 빠뜨리거나 어떤 손실이 좋은지 또는 손실이 좋은지 측정하거나, 최적화 도구를 사용하여 또 다시 추측하는 것입니다. 지정한 세대의 수만큼 계산됩니다. 해당 코드를 실행하면 에포크마다 손실이 출력됩니다.

model.fit(xs, ys, epochs=500)

예를 들어 처음 몇 세대의 경우 손실 값은 매우 크지만 각 단계에서 점점 작아지는 것을 확인할 수 있습니다.

f110d5abed07c1b9.png

학습이 진행되는 동안 손실은 곧 줄어듭니다.

81ca5e71298b414b.png

학습이 완료될 때까지 손실은 매우 미미합니다. 이는 모델이 숫자 간의 관계를 잘 추론하고 있음을 보여줍니다.

12b187014b639fd.png

500세대가 모두 필요하지는 않으며 수량을 다르게 실험해 볼 수 있습니다. 이 예시에서 볼 수 있듯이 50에포크만 지나면 손실이 실제로 발생하므로 충분할 수 있습니다.

5. 모델 사용

X와 Y의 관계를 학습하도록 학습된 모델이 있습니다. model.predict 메서드를 사용하여 이전에 알려지지 않은 X의 Y를 파악할 수 있습니다. 예를 들어 X가 10이라면 Y는 어떻게 될까요? 다음 코드를 실행하기 전에 추측해 보세요.

print(model.predict([10.0]))

31번이라고 생각할 수도 있겠지만 결국에는 조금 버거웠습니다. 왜 그럴까요?

신경망은 확률을 다루기 때문에 X와 Y의 관계는 Y=3X+1이 될 확률이 매우 높지만, 6개의 데이터 포인트만으로는 알 수 없습니다. 결과는 31에 가깝지만 31이 아닌 경우도 있습니다.

신경망을 사용할 때 패턴이 반복되는 것을 볼 수 있습니다. 거의 항상 불확실성이 아닌 확률을 다루며, 특히 분류와 관련하여 확률을 기반으로 결과를 결정하는 데 약간의 코딩을 합니다.

6. 축하합니다

믿지 못하더라도 훨씬 더 복잡한 시나리오에서 사용할 ML의 대부분의 개념을 다뤘습니다. 네트워크를 정의하여 신경망이 두 숫자 집합 간의 관계를 발견하도록 학습시키는 방법을 배웠습니다. 뉴런(이 경우에는 하나만)을 포함하는 레이어 집합을 정의한 다음 손실 함수와 옵티마이저로 컴파일했습니다.

네트워크, 손실 함수, 최적화 도구 컬렉션은 숫자 간의 관계를 추측하고 연결 실적을 측정한 후 새로운 추측을 위한 새 매개변수를 생성하는 프로세스를 처리합니다. TensorFlow.org에서 자세히 알아보세요.

자세히 알아보기

ML 및 TensorFlow가 컴퓨터 비전 모델에 어떤 도움이 되는지 알아보려면 TensorFlow로 컴퓨터 비전 모델 빌드를 진행합니다.