기계학습 - TensorFlow에 대한 개념과 실습과정 및 결론
업데이트:
TensorFlow 소개
텐서플로우란?
텐서플로우란 구글에서 공개한 오픈소스 라이브러리 입니다. 데이터 플로우 그래프를 사용하여 수치 연산을 지원하는 라이브러리 입니다.
주로 기계학습과 딥러닝(딥 뉴럴 네트워크) 연구 목적으로 개발합니다. 물론 여러 다른 분야에서도 적용 가능합니다.
- 모든 연산은 데이터 플로우 그래프에 기반해 처리
- CPU나 GPU를 사용하여 연산
데이터 플로우 그래프
- Node: 그래프에서 연산자를 표현
- Edge: 다차원 데이터 배열(tensor)을 표현
- TensorFlow는 edge를 통해 텐서가 흐르면서, node에서 연산이 수행되는 현상을 뜻함
- 그래프 생성 이후, 세션에서 노드를 실행시켜야 연산 결과 반환 가능
작동 원리
- 텐서플로우 연산에 사용되는 그래프 빌드
- Feed 데이터를 넣고 동작
- 값을 반환하고 그래프의 변수 업데이트
텐서
텐서는 다차원 배열로서 텐서플로우에서 기본 자료형을 의미합니다. TensorFlow에서 모든 데이터는 이러한 텐서 데이터 구조를 갖습니다.
- 텐서의 3가지 요소
- Rank: 텐서의 차원의 수
- Shape: 텐서의 구조
- Type: 구성 원소의 자료형
변수와 플레이스 홀더
- 모델의 학습 가능한 변수를 정의할 때 사용
- 학습과정에서, 매개변수를 저장하는데 사용
- 상수와 달리 가변적인 특징을 지님
- 변수는 반드시 생성시 초기 값이 필요
- 특정 값을 갖거나, 랜덤으로 생성된 텐서
- 플레이스홀더: 텐서플로우를 실행할 때 데이터를 전달해 주기 위해 사용되는 일종의 변수
- 초기화 없이 tf.placeholder를 사용하여 정의
- Session.run() 메소드에서 feed_dict를 사용하여 실제 값 전달
텐서 보드
- 프로그램에서 생성한 데이터 플로우 그래프를 보여줌
- 해당 정보 저장을 위해 tf.summary.FileWrite() 메소드 사용
- 텐서보드 서버 프로그램은 웹서버 형태로 동작
- 파이참의 Terminal에서 (View > Tool Windows > Terminal) 실행 명령
- Tensorboar -logdir = ./graphs
- 실행 결과 확인: http://localhost:6006/
텐서 플로우를 이용한 기계학습
- 선형회귀 – 학습 데이터를 잘 근사하는 함수를 찾는 기계학습 문제
- 모델식 (Hyposthesis)
- 오차함수 (cost)
TensorFlow를 활용한 실습
개발 환경 구축
파이참, 파이썬 설치
우선 파이참 IDE와 파이썬을 설치해야 합니다.
- 파이참: https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows
- 되도록 Community 버전을 다운로드 받습니다.
- 파이썬: https://www.python.org/downloads/
- 2020. 06. 03 기준, 3.8.3 버전이 최신이므로 이를 다운로드 받습니다.
다음과 같이 파이참, 파이썬의 설치파일이 다운로드 되면, 설치를 진행합니다.
파이참은 그냥 설치를 진행하면 되지만 파이썬의 경우는 한 가지 확인해야 합니다. 설치를 진행할 때, 저 파이썬이 설치 경로가 나올텐데 이를 기억을 해둡니다. 파이참에서 파이썬 경로를 설정할 때, 경로를 친철하게 알려주지 않기 때문입니다.
파이참 프로젝트 생성
설치가 완료되면, 파이참 프로젝트를 하나 생성해줍니다. 프로젝트가 정상적으로 생성되면 다음과 같은 설정작업을 거쳐서 프로젝트 화면을 출력합니다.
파이썬 연결
이제 파이참에서 인터프리터를 파이썬으로 지정하여 연결을 시켜 주어야 합니다.
File – Settings – Project Interpreter 경로를 찾아 들어갑니다. 그리고 상단에서 파이썬 설치경로의 파이썬 파일을 지정하여 연결합니다. 여기서 우측의 톱니바퀴 모양 아이콘을 누르면 가상 환경을 사용할지, 시스템 환경을 사용할지 선택할 수 있습니다. 각각의 장단점이 있으며, 사용자가 원하는 장점에 맞는 환경을 선택하면 됩니다.
텐서플로우 설치
마지막으로 Tensorflow를 설치합니다. 위의 사진에서 버튼을 누르면 패키지 설치 화면이 나옵니다. 여기서 T를 설치하고, 추가로 결과를 보여주기위한 matplotlib와 수치계산을 위한 numpy도 추가로 검색하여 설치합니다.
다음과 같은 화면이 나오면 텐서플로우가 설치되었고, 기계학습을 위한 환경이 모두 구축된 것 입니다.
기계학습 실습
실습 진행
설치한 텐서플로우를 바탕으로 구성된 기계학습 환경에서 실습을 진행해보았습니다.
기계학습과 처리가 본 프로그램에서 진행되는 과정은 다음과 같습니다.
- 학습 데이터를 정의합니다.
- 입, 출력을 저장할 placeholder 변수를 설정합니다. (x, y)
- 가중치와 절편을 설정합니다. (w, b)
- 학습될 가설, 함수 모양을 설정합니다.
- 학습될 가설의 비용, 최적화 알고리즘, 최적화 대상과 목적을 설정합니다.
- 학습을 시작합니다.
- 질의를 통해 실제 데이터를 넣었을 때의 결과를 출력합니다.
Matplotlib를 활용하여 데이터를 시각화 하면 다음과 같이 출력됩니다.
실습 결과
기계학습의 결과는 놀라웠습니다. 단순히 데이터만 지니고 있으면, 이를 수학적인 연산을 통하여 기계학습을 진행하고, 이를 통해 통계를 내고, 그것을 모델화 하여 실제 데이터를 바탕으로 이렇듯 어느 정도의 추정치를 만들어 낸 다는 것이 정말 대단한 인공지능 기술이라고 생각합니다.
물론 그 수학적 연산이나 관련 기술들은 엄청난 연구를 바탕으로 만들어진 것입니다. 하지만 현재, Tensorflow를 통해서 누구나 쉽게 기계학습을 시킬 수 있고, 기계학습의 결과 또한 Matplotlib을 통해 그래프로 시각화 해줍니다. 이외에도, 찾아보니 수많은 기계학습을 위한 편리한 라이브러리들이 존재하였습니다.
이처럼 기계학습은 굉장히 흥미롭고 어떻게 보면 무겁고 복잡한 기술입니다. 하지만 요즘은 기계학습을 위한 환경이 잘 되어있기 때문에 누구나 쉽고 간단하게 본인이 원하는 어떠한 데이터들도 직접 학습시키고 활용할 수 있다는 것은 커다란 장점이라고 생각합니다. 이렇듯 진입 장벽이 높았었던 기존의 인공지능 기술과 달리 현재의 인공지능 기술은 초기에 누구나 쉽게 다가갈 수 있으며 4차산업혁명의 새로운 가치를 창출해 낸다는 것이 인공지능 분야가 급부상하고있는 가장 큰 이유라고 생각합니다.
결론
기계학습
그렇다면 이제는 기계학습의 정의를 명확하게 내릴 수 있습니다. 이처럼 기계학습
은 기계가 여러가지 데이터로부터 많은 시행착오를 거치면서 형성된 경험을 바탕으로, 프로그램을 스스로 학습하도록 함으로써 성능에 대한 측정을 향상시키는 인공지능 기술의 하나라고 생각합니다.
그러면 반대로 딥 러닝(심층학습)
은 무엇일까요? 기계학습의 경우 인간이 먼저 데이터의 특징을 분류하여 컴퓨터가 인식할 수 있도록 한 후, 학습을 진행합니다. 하지만 딥 러닝의 경우 이러한 인간이 하던 작업이 생략되고. 딥러닝 알고리즘이 신경망을 이용해 스스로 분석을 한 후 답을 내는 방식이라고 정의 내릴 수 있습니다. 즉, 기계학습이 딥 러닝을 포함하고 있는 관계라고 말할 수 있습니다.
이번 실습과정을 통해 기계학습의 개념과 원리를 직접 배울 수 있었습니다. 기존에 알고 있던 기계학습의 지식을 직접 실습을 통해 경험을 해보았다는 점에서 많은 것들을 느끼고 인공지능 분야의 엄청난 발전가능성을 다시금 깨닫게 된 것 같습니다.
기계학습 응용문제
저는 기계학습을 직접 응용할 수 있는 분야에 대해 생각해보았습니다. 저는 온라인 의류 쇼핑몰에 기계학습을 효과적으로 적용할 수 있지 않을까 생각했습니다. 왜냐하면 온라인 쇼핑몰에서 의류를 구매할 때, 의류마다 사이즈가 다 다르기 때문에 나에게 맞는 옷의 사이즈를 알지 못하는 경우가 많았습니다. 더군다나 실측 사이즈를 알아도, 실제로 쇼핑몰에 기재된 옷의 사이즈와 다른 경우도 있었고 쇼핑몰이 추천해준 사이즈가 불만족스러운 경우 등, 문제가 되는 경우가 많았습니다. 이러한 문제를 해결하기 위해 기계학습을 적용한 시나리오는 다음과 같습니다.
우선 데이터를 수집하여 기계학습을 적용시키고자 합니다. 먼저 해당 의류의 실측 사이즈와 비슷한 많은 사용자 만족 후기 데이터들을 수집합니다. 그리고 수집한 후기 데이터의 키와 몸무게를 분석하여 이를 사용자 체형 데이터로 만들어줍니다. 이후, 이를 입력 값으로 넣고, 결과값으로 사이즈 값을 출력합니다. 이렇게 되면 사용자 체형 데이터를 바탕으로 해당하는 사이즈 결과값을 추출할 수 있습니다.
이제 사용자 입장으로 가서 의류 구매자는 구매하고자 하는 의류를 선택하여 본인의 키와 몸무게를 입력합니다. 시스템은 우선 키와 몸무게의 서로의 상관관계를 비교하여 도출하고, 하나의 입력 값인 체형 데이터를 만들어냅니다. 이를 이제 학습시킨 모델에 이 데이터 값을 입력하게 되면 추정한 사이즈 결과값을 추출하여 사용자에게 보여줍니다.
여기서 키와 몸무게의 상관관계는 우선 비율 값으로 추출하고, 이를 키와 몸무게 개별 값으로 분석하여 최적의 사이즈를 추정하여 데이터로 만들어낼 수 있다고 생각합니다.
다음 그림은 입력 데이터를 분석한 체형과 출력 데이터인 사이즈를 백분위로 나누어 출력한 예시입니다. 출력 값인 사이즈는 판매중인 의류 사이즈를 가장 작은 사이즈 ~ 가장 큰 사이즈로 체형 데이터와 맞추어 분류하였습니다.
- 참고 자료: 인공지능: 튜링테스트에서 딥러닝까지 (생능출판 - 이건명)
댓글남기기