brunch

You can make anything
by writing

C.S.Lewis

by 코딩하는 수학쌤 Nov 08. 2021

42. Python의 대표적 AI 관련 library들

 이전 글의 블록 코딩의 다음으로 이어집니다.



 2) 텍스트 코딩 : 파이썬이 대표적


 컴퓨터 언어 중에서 직접 명령문을 글의 형태로 작성하는 언어를 텍스트형 프로그래밍 언어라고 부릅니다. 고등학교 정보 교과부터 주로 텍스트형 프로그래밍 언어를 배우는데 대부분 파이썬(Python), C언어 중 하나를 고등학교 정보, 혹은 대학교 입학 후 프로그래밍 입문 교과에서 주로 배웁니다.


 앞서 언급한 대로 인공지능 구현에 특정 언어만을 사용할 수 있는 것은 아닙니다. 마치 텃밭에 배추 재배하기에 적합하도록 농기구와 수로가 정비되어 있다면 쉽게 배추를 키울 수 있듯 인공지능을 구현하는데 편리하도록 다양한 도구들이 개발된 언어들이 있죠. 그중 파이썬이 대표적입니다. 파이썬에는 인공지능과 관련된 도구들의 모음인 tensorflow와 같은 라이브러리가 다양하게 개발되어 있어서 쉽게 인공지능을 구현할 수 있습니다. 라이브러리란 파이썬에서 여러 명령어들을 사용하기 편리하게 묶어놓은 것을 의미합니다. 마치 필요한 책들을 도서관에 모아놓고 언제든 꺼내 사용할 수 있도록 모아놓은 패키지라고 할 수 있습니다. 파이썬은 이러한 라이브러리를 누구나 개발할 수 있으며, 개발된 라이브러리를 얼마든지 설치해서 사용할 수 있습니다. 인공지능에 주로 활용하는 라이브러리로  데이터의 처리에 필요한 numpy, 분석에 필요한 pandas, 시각화에 필요한 matplotlib, 인공지능, 딥러닝 등에서 쉽게 활용할 수 있는 tensorflow, keras 등이 있습니다.


 그렇다면 청소년 시기에는 인공지능을 공부하기 위해 파이썬을 어디까지 배워야 할까요? 개인적 호기심이나 이해도에 따라 달라질 수 있겠지만 대부분의 경우 청소년 시기에는 정보 교과에서 배우는 파이썬의 기초적인 문법에 능숙해지는 것만으로도 충분합니다. 앞에서 언급한 numpy, pandas, matplotlib 등의 데이터 관련 라이브러리나 Tensorflow, keras 등과 같은 신경망과 연관된 라이브러리는 대학생이 된 이후에 다루어도 늦지 않습니다. 먼저 데이터의 중요성, 인공지능에 활용되는 수학적 원리, 인공지능의 기초적인 이해, 코딩의 기초 등과 같이 기본기를 탄탄하게 다지는 것이 장래를 위해 훨씬 도움이 됩니다. 


 하지만 일부 학교에서는 정보 교과가 개설되지 않아서 python을 배우고 싶어도 배우지 못하는 상황도 있죠. 간단하게 정보 교과에서는 python을 어느 정도로 배우게 되는지를 함께 살펴보겠습니다.  


고교 정보 시간에 배우는 python 기초

 교과서마다 다를 수 있겠지만 고교 정보 교과는 일반적으로 다음과 같은 구조로 구성되어 있습니다.


씨마스 출판사의 정보 교과서 단원 구성

 이 단원 중에서 코딩에 관련한 내용은 3단원 후반에 나오는 ‘프로그래밍’입니다. 프로그래밍은 또한 다음과 같은 체계로 구성이 되어 있습니다.



 생각보다 프로그래밍 단원에 담긴 내용들이 많죠? 다른 단원은 주로 내용을 이해하는 것으로 충분하지만 프로그래밍 단원에서는 내용의 이해와 함께 능숙해지는 연습도 많이 필요합니다.  




데이터를 계산하는 Numpy



컴퓨터에서 데이터를 다룰 때는 주로 벡터, 그중에서도 행렬의 형태로 많이 다룹니다. 행렬은 계산 방법이 조금 반복적이고 복잡하기 때문에 이를 간편하게 다룰 수 있는 선형대수학의 도구들을 모아놓은 것이 numpy입니다. 특히 딥러닝의 경우 각 데이터에 가중치를 곱하고 편향 값을 더하는 등의 연산이 모두 행렬을 통해서 이루어지기 때문에 numpy는 필수적으로 다루어집니다. 


 numpy를 올바로 이해하기 위해서는 선형대수학의 이해가 조금 필요합니다. 데이터의 차원이라던가 모양 등과 같은 구조를 함께 살펴야 하기 때문입니다. 따라서 대학에서 행렬을 다루는 선형대수학을 공부한 후 다루는 것을 추천합니다. (선형대수학은 이공계열 학과에서 1학년 혹은 2학년 1학기에 대부분 수강합니다.)




데이터 분석을 위한 Pandas, 시각화를 위한 Matplotlib


 pandas는 표의 형태와 같은 데이터를 쉽게 처리할 수 있는 라이브러리입니다. 인공지능이나 데이터 과학 등에서 사용하는 데이터는 대부분 표의 형태로 저장이 되어있습니다. 이러한 표를 데이터 프레임(df : data frame)이라는 개체로 불러와 쉽게 다루는 방법을 제공하는 라이브러리가 pandas입니다.


 앞에서 살펴본 numpy는 행렬 형태의 데이터 계산 및 처리를 도와주는 것이라면 pandas는 표를 살펴보고 데이터를 확인, 선택, 한다거나 추출하는 등의 역할을 합니다. 때로는 파일 입출력을 통해 다루고 있는 표 형태의 데이터를 불러오고 파일에 저장하기도 합니다.


  하지만 이러한 데이터의 분포나 특징 등을 한눈에 파악하기는 어렵습니다. 파이썬에서는 Matplotlib 라이브러리를 활용해 다양한 방식의 도구를 통해 데이터를 시각화할 수 있습니다. 점을 찍는 산포도, 선 그리기, 히스토그램, 막대그래프, 원형 그래프, 칼라 맵, 3차원 그래프 등 데이터를 표현하기에 적합한 다양한 형태의 도구를 제공합니다.


matplotlib에서 다루고 있는 다양한 시각화 도구들




 

인공지능 라이브러리 텐서플로, 케라스



 다른 머신러닝에 비해 딥러닝은 인공신경망도 구축해야 하고, 오차 역전파에 의한 학습 또한 진행해야 하므로 설계할 내용들이 꽤 많이 있습니다. 이런 절차들을 편리하게 하기 위해 개발자들이 딥러닝을 위한 패키지들을 개발하기 시작했습니다. 그중 구글에서 개발하고 오픈 소스로 공개한 머신러닝 패키지가 텐서플로입니다. 


 텐서플로를 사용하면 인공신경망을 쉽게 설계할 수 있습니다. 파이썬을 활용하여 인공신경망을 하나하나 구축하려면 시간도 많이 걸리고 번거로운데 텐서플로에서는 간단하게 인공신경망을 만들 수 있고 쉽게 적용할 수 있는 여러 함수들을 제공합니다.


 하지만 딥러닝의 단계를 편하게 사용할 수 있게 해 놓았음에도 불구하고 딥러닝에서는 신경망의 각 층의 분석 모델을 설계해야 하고, 각 층마다 활성화 함수를 설계해야 하며, 최적화 함수 등 단계가 복잡한 많이 있기 때문에 어서 차근차근 설계해야 할 것들이 많습니다. 이러한 내용을 패키지로 더 묶어놓은 라이브러리가 케라스(keras)입니다. 아주 간단한 신경망의 경우는 케라스 라이브러리를 사용하면 단 몇 줄로 구현할 수 있을 정도입니다. 예를 들어 아래의 명령어를 한 번 살펴보겠습니다.


model=Sequential( )

model.add(Dense(30, input_dim=15, activation=’relu’)

model.add(Dense(1, activation=’sigmoid’)



 딥러닝에서는 여러 퍼셉트론의 층들을 쌓아놓고 있는 구조로 되어있지요. 이 층을 하나하나 설계하는 것은 번거로울 수 있지만 keras에서는 Sequential( ) 함수를 통해 간단히 구현할 수 있습니다. 층을 쌓는 것은 model.add라는 메서드를 통해 설정합니다. 각 층에서 노드의 개수, 입력하는 차원의 개수, 활성화 함수 종류를 를 설정값으로 하나씩 입력해주면 쉽게 딥러닝의 층이 만들어집니다.

 케라스는 패키지화를 통해 한꺼번에 여러 단계가 묶이기 때문에 신경망을 세밀하게 관찰한다던가 연구 개발을 해야 한다던가 새로운 방식으로 신경망을 만들 때는 적합하지 않을 때가 있습니다. 이 경우에는 텐서플로를 통해 딥러닝을 활용하기도 합니다.

 이와 같은 텐서플로나 케라스 등의 딥러닝은 청소년기에 개인적으로 공부할 수도 있겠지만 대부분 대학 3학년 이후의 전공과목이나 혹은 인공지능 대학원에서 시작을 하는 경우가 많습니다. 그러니 위의 내용들을 반드시 알아야만 인공지능 전공을 할 수 있다는 의미가 아니니 부담은 내려놓아도 됩니다.  




천리길도 한 걸음부터  


 위에서 언급한 여러 라이브러리들은 각 한 가지의 라이브러리에 대해 몇 백 페이지의 두툼한 책이 나올 만큼 많은 내용을 담고 있습니다. 마치 수학을 공부하려면 선형대수학, 확률과 통계, 미적분학, 기하학 등 수많은 과목의 두툼한 전공서적이 있듯 각각의  라이브러리만 하더라도 몇 장으로 요약하는 것은 불가능합니다. 


 그런데 여러분은 수학과 영어 공부를 어떻게 하세요? 대부분은 이런 교과들이 하루아침에 학습할 수 있는 내용이 아닌 것은 잘 알고 있을 것입니다. 영어와 같은 언어는 많이 사용하고 많이 소통하면서 자신도 모르게 몸에 배도록 해야 하고, 수학도 과학을 표현하는 언어이므로 많은 문제를 풀어보며 표현 능력을 키우고 문제 해결 능력도 키워가게 됩니다.


 파이썬 코딩도 마찬가지입니다. 컴퓨터 언어이므로 이와 같이 시작해야 합니다. 하나씩 완전히 마스터하겠다는 마음보다는 기초적 문법을 충실히 익히고 이후 전공 과정에서 다양한 프로젝트를 해보면서 여러 라이브러리를 다루어 보는 경험이 좋습니다. 간혹 중고등학교 때 딥러닝을 활용한 앱을 만들었다거나 능숙하게 구현하는 학생들도 간간히 기사를 통해 소개가 되기도 합니다. 그런 경우는 마치 중학교 때 고등학교 수학을 완전히 마스터한 것에 비유할 수 있을 만큼 매우 특수한 케이스이죠.


 공공데이터가 공개되면서 이 데이터들을 기반으로 한 프로젝트를 다루는 책들이 시중에 많이 나와있습니다. 많은 책들이 파이썬의 Pandas나 Numpy, Matplotlib을 통해 데이터 처리, 분석을 하고 시각화를 통해 데이터의 특성을 살펴봅니다. 그런 이후 딥러닝을 통해 예측 프로그램, 분류 프로그램을 만들어보는 활동들을 천천히 공부해보면 위의 라이브러리들을 골고루 다루어 볼 수 있습니다. 시작은 그렇게 천천히 하는 것을 추천해드립니다.

매거진의 이전글 41. 블록 코딩과 인공지능 교육
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari