[Tensorflow] 1. Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning Paradigm (1 week A new Programming Paradigm) - lecture

gunny·2024년 4월 8일
0

[Tensorflow] 1. Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning Paradigm (1 week A new Programming Paradigm) - Lecture

Introduction: A conversation with Andrew NG

인공지능, 기계 학습 및 딥 러닝을 위한 Tensorflow를 활용하는 방법
컴퓨터 비전, 합성공 신경망을 위한 비전 향상

TensorFlow의 주요 구성 요소는?

  • Tensor(텐서) : TensorFlow의 핵심 데이터 구조로 다차원 배열
    텐서는 수치 데이터를 나타내는데 새용되며 계산 그래프에서 데이터의 흐름을 나타내는 역할을 한다.
  • Graph(그래프) : Tensorflow에서 계산 작업을 표현하기 위해 그래프를 사용한다. 그래프는 노드(node)와 엣지(Edge)로 구성되고, 노드는 수학적 연산을 나타내고 엣지는 데이터의 흐름을 나타낸다.
  • Variable(변수) : Tensroflow에서는 변수를 사용해 모델의 파라미터를 저장하고 업데이트 한다. 변수는 그래프의 상태를 유지하며, 학습 중에 최적화 알고리즘에 의해 업데이트 된다.
  • Session(세션) : Tensorflow에서는 세션을 사용해서 그래프를 실행한다. 세션은 그래프의 연산을 실행하고 결과를 반환하는 역할을 한다.
  • Optimizer(옵티마이저) : Tensorflow에서는 옵티마이저를 사용해 모델을 학습시킬 수 있다. 옵티마이저는 손실 함수를 최소화하는 방향으로 모델의 파라미터를 업데이트한다.
  • Keras(케라스) : Tensorflow의 고수준 API인 케라스는 딥러닝 모델을 쉽게 구축하고 학습할 수 있는 도구이다.
    케라스는 Tensorflow와 함께 사용되고 딥러닝 모델을 빠르게 구현할 수 있는 간편한 인터페이스를 제공한다.

A primer in machine learning

예를 들어 만약 주식을 분석할 수 있는 애플리케이션을 코딩해서 가격을 비율로 나누는 것이라면, 보통 코드를 작성해서 데이터 소스에서 값을 가져오고 계산을 해서 결과값을 반환하게 한다.

게임을 프로그래밍한다면 일반적으로 규칙을 파악해서, 공이 만약 벽돌을 치면 벽돌이 사라지고 공은 튕겨나간다. 공이 화면 밑으로 떨어지면 플레이어가 목숨을 잃는다.

이 다이어그램으로 표현할 수 있는데, 규칙과 데이터를 입력하면 정답이 나오는 것이다.
이 때 규칙은 프로그래밍 언어로 표현되고, 데이터의 경우 지역 변수부터 데이터베이스와 같이 다양한 소스에서 얻을 수 있다.

머신러닝은 위와 같이 데이터에 정답을 입력하면 규칙이 나오는 다이어그램과는 다르다. 우리는 AI 개발자로서 벽돌을 제거해야 할 시기, 플레이어의 목숨이 끝나야할 시기와 같은 특정 콘센트에 걸맞는 분석 같은 규칙보다는 다양한 예시를 확보하고, 규칙은 컴퓨터가 파악하도록 한다.

스스로 규칙을 파악하여 문제를 풀 수 없는 경우에 유용하다.

활동 인지에 관한 예시를 들어볼 때, 만약 걷는 사람을 감지하는 장치를 제작하는 중이고, 걷는 속도에 관한 데이터가 있다면 이러한 코드를 작성할 수 있다.

사람이 제대로 달리면 속도가 빨라져서 코드를 이렇게 조정하고,

자전거를 타고 있다면 코드를 이렇게 조정한다.

그러나, 골프 활동도 인지해야 한다면 콘셉트가 무너지게된다.
속도만 고려하는 것은 너무 단순하다.

오르막과 내리막을 걷고 뛸 때는 속도가 달라지고, 사람마다 속도도 다르다.

다이어그램으로 다시 돌아와서, 머신러닝은 이와 아주 유사하다.
축을 좀 바꿔서, 불가능한 상황에서도 문제를 규칙으로 표현하려고 노력하는게 아니다.
새로운 패더라임에서는 수많은 예시를 다루고 레이블을 붙여서 분류한 다음 데이터를 사용해서 걷는 모습과 달리는 모습, 자전거를 타는 모습, 그리고 골프 치는 모습을 파악한다.

이렇게 되면 정답과 데이터를 입력하고 규칙은 기계가 추론한다.

그 다음 머신러닝 알고리즘이 각 데이터 세트의 특수성을 결정하는 패턴을 파악한다.

이 부분이 바로 프로그래밍 패러다임에서 가장 강력하고 재미있는 부분이다.
단순히 과거를 동일하게 반복하는 새로운 방식이 아니고,
전에는 실행 불가능했던 새로운 가능성을 열어주는 것이다.

이와 같은 유형의 패턴 인식에 신경망을 생성하는 기본적인 방법을 수행해보자.

신경망이란 머신러닝이 더욱 향상된 형태이고, 이를 딥러닝이라고 부른다.

The 'Hello World' of neural networks

머신러닝은 컴퓨터가 어떤 것을 구별할 수 있도록 하는 패턴을 배우는 것이다. 활동 인식을 생각해보면, 다양한 기기의 센서들을 통해 얻은 데이터를 바탕으로 걷기/뛰기/자전거 타기의 패턴을 학습하는 것이다.

그 작동 방식을 보여주기 위해서 아래의 해당 숫자들을 보자.
그리고 가능하다면 숫자 사이의 패턴을 생각해보자.

X를 Y로 매핑하는 공식을 생각해보자.
자 정답은 Y=2X-1 이다.
Y를 보면 X를 두 배한 값에 -1을 한 것과 일치하다.

이것은 python과 tensorflow, Tensorflow의 keras라는 API를 바탕으로 작성되었다. keras는 신경망을 손쉽게 정의할 수 있게 해준다.
기본적으로 신경망은 패턴을 학습할 수 있는 함수의 집합이다.

가장 간단한 신경망은 단 하나의 뉴런만을 가지고 있는 것이다.

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

keras에서 연결된 뉴런을 정의하려면 Dense라는 용어를 사용한다.
여기서는 단 하나의 Dense가 존재하고, 여기에는 하나의 레이어만 있고 단 하나의 unit이 있으므로 싱글 뉴런이라고 한다.
연속된 레이어들은 시퀀스 안에 정의되기 때문에 Sequential 이라는 단어가 있다.

여기서는 하나의 뉴런을 가지고 있다. 신경망의 입력에 관한 것을 먼저 정의한다. 이 경우 단 하나의 레이어만 있다. 입력은 아주 간단한 하나의 값이다.

모델을 최적화하기 위해서는 다양한 확률과 수식을 알아야하지만,
keras에는 수학이 이미 함수 안에 구현되어 있다.
우리가 알아야하는 함수는 손실 함수와 옵티마이저이고 코드로 이렇게 구현한다.

model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

신경망은 x와 y에 대한 관계를 몰라 추측한다.
신경망이 y = 10x -10으로 추측했다고 했을 때, 그 추측이 잘된것인지 잘못된 것인지 판단하기 위해서 우리가 봤던 x,y 와 같은 이미 알고 있는 데이터들을 확인한다.
손실함수가 이를 측정하고 옵티마이저가 다음 추축을 할 수 있도록 데이터를 전달한다.
이 옵티마이저는 손실 함수로부터 받은 데이터를 통해 추측이 얼마나 정확했는지 혹은 잘못됐는지 결정한다.
결과적으로 추측은 그전에 이루어진 것보다 더 나아진다.
추측이 점점 좋아질 수록 정확도는 100%에 가까워지는데, 이를 통섭이라고 한다.

이 경우 손실값은 평균 제곱오차(MSE)이고, 옵티마이저는 확률적 경사하강법을 일컫는 SGD이다.

다음 단계는 알려진 데이터를 표시하는 것이다
위에서의 숫자값들을 np.array로 데이터의 표현을 훨씬 쉽게 해주는 numpy라는 python 라이브러리를 사용한다.

여기 코드에서 하나는 x, 하나는 y이다.

훈련은 fit을 사용해서 모델에게 어떻게 x값을 y값에 맞출지 알아내도록 요청한다. epoch가 500이라는 것은 훈련이 총 500번 반복된다는 뜻이다.

추측하고 손실 함수로 추측의 결과를 판단한 뒤 옵티마이저를 활용해 또 다른 추측을 하는 이 과정을 반복한다.

모델이 훈련을 마치면 예측 방법을 사용해 값을 낸다.
이전에는 10으로 보이지 않았지만, 10을 넣는다면 어떤 결과가 나올까?
19 가 나올 것으로 예상한다 2x-1의 식이었기 때문이다.

실제로 진행한다면 정확하게 19가 나오지는 않는다.
궁극적으로 두 가지 이유가 있는데,
첫 번째는 무척 적은 데이터인 총 6개로만 학습했기 때문이다.
이 숫자들은 선형적인 관계를 가지지만 모든 X가 2x-1의 관계를 가진다는 보장이 없다.
굉장히 높은 확률로 x가 10일때 y는 19일 뿐이다.
하지만 신경망은 양수가 아니다. y의 현실적인 값을 알아낼 것이다.

두 번째 이유는 신경망을 사용할 때 모든 것의 답을 알아내고자 하는 경우 확률을 다룬다.
그리고 어떻게 정답을 맞게 처리할지 조정해야 한다.

Working through 'Hello World' in TensorFlow and Python

해당 섹션에서는 머신러닝과 딥러닝의 개념과 패러다임에 대해 소개했다.
코딩 언어로 규칙을 표현하는 전통적인 패러다임이 문제를 해결하는 데 항상 효과적인 것은 아니다.
컴퓨터 비전과 같은 애플리케이션은 규칙 기반 프로그래밍으로 해결하기가 매우 어렵. 대신, 컴퓨터가 데이터를 처리하고 패턴을 일치시키는 데 매우 능숙하다는 점을 감안하여 컴퓨터가 인식하기를 원하는 것을 설명(또는 레이블 지정)할 수 있는 충분한 데이터를 컴퓨터에 제공하면 잠재적으로 시스템을 '훈련'시켜 문제를 해결할 수 있다.

아주 간단한 예로 선에 숫자를 맞추는 것을 수행해봤다.
이제 신경망을 훈련시켜 일련의 숫자가 어떻게 선을 구성하는지 학습하는 코드를 실행해보자. 그런 다음 학습된 네트워크에 새 데이터 포인트를 입력하고 예상 값을 올바르게 예측하는지 확인한다.

코드를 사용하는 규칙 기반 표현식에서 데이터를 얻고 데이터에 레이블을 지정한 다음 신경망을 통해 규칙을 생성하는 패턴을 파악하도록 하는 것이다. x와 y값을 가져와서 둘 사이의 관계를 알아낸다.

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글

관련 채용 정보