이 책에 관한 지난번 포스팅에서 빅데이터 분야 관련 자격증들을 쭉 소개했었는데 오늘은 ‘SQL 개발자‘라는 자격증에 대한 얘기가 나온다. 다만, 저자의 말에 따르면 이 자격증은 AI 빅데이터 전문가가 되기 위해 반드시 필요한 건 아니지만 그래도 관련 내용을 알아두면 데이터 추출 시 가공을 분석 목적에 맞게 용이하게 할 수 있기에 도움이 된다고 한다. 역시 많이 알아서 나쁠건 그닥 없는 듯하다. 물론 투입량 대비 산출량이라는 효율성 측면에서는 어떨지 모르겠지만 말이다.

AI 빅데이터 전문가는 데이터베이스 구축이나 모델링까지는 잘 하지 않고 앞에서 설명한 CRUD 쿼리와 여러 조건문을 익힌다. 그런데 해당 자격 시험(SQL개발자, SQLD)은 데이터베이스 모델링과 쿼리, 데이터베이스 최적화에 대한 내용이 중심이고 RDBMS 기준으로 만들었기 때문에 NoSQL과 큰 연관이 없다. 이러한 내용은 꼭 필요하다고 할 수 없으므로 여유가 없다면 건너 뛰어도 좋다. - P151

단, 해당 자격 시험을 공부할 필요가 없다고 데이터베이스를 공부할 필요가 없다는 뜻은 아니다. 단지 SQL 관련 자격증 책에서 다루는 내용을 자세히 알 필요가 없다는 것이다. 예를 들어 자격 시험에 통과하려면 굉장히 복잡한 SQL 쿼리문을 공부해야 한다. 물론 이러한 쿼리문을 익히면 데이터베이스에서 데이터를 추출할 때부터 어느 정도 데이터를 가공할 수 있기 때문에 유용하다. - P151

AI 빅데이터 분석가는 SQL 쿼리문으로 가공 전 데이터를 불러온 후 판다스pandas 같은 파이썬의 데이터 분석 라이브러리를 활용하여 데이터를 가공할 수 있으므로 굳이 복잡한 SQL 쿼리문을 알 필요는 없다. SQL이든 판다스든 데이터를 똑같이 가공할 수 있지만 판다스가 훨씬 사용자 친화적이기도 하다. - P151

판다스로 작업하면 해당 작업을 ‘테이블 2개의 특정 컬럼 정하기‘, ‘특정 컬럼으로 두 테이블 합하기‘, ‘새로운 컬럼 3개 지정하기‘, ‘컬럼 3개 값 더하기‘ 등을 단계별 코드로 만들어 실행할 수 있으므로 코드가 덜 복잡하고 오류가 발생했을 때 어떤 단계에 문제가 있는지 쉽게 알 수 있다. 판다스에는 이러한 작업을 별도로 실행하는 merge 함수 (테이블의 데이터 합하기), 사칙연산 함수(컬럼 값의 합계 구하기), groupby 함수와 mean 메소드(그룹화한 후 평균 계산하기) 등이 있다. 또한 이러한 코드를 순서대로 실행하기에 실행 흐름을 이해하기도 좋다. 즉, 이러한 파이썬의 데이터 분석 라이브러리는 SQLD 자격 시험을 너무 상세히 공부할 필요가 없게 만드는 훌륭한 이유인 것이다. - P152

파이썬은 세미콜론을 입력할 필요가 없지만 자바는 반드시 입력해야 문제가 발생하지 않는다. - P158

(파이썬은) 데이터의 성질을 나타내는 자료형(예: 문자열, 정수, 부동소숫점)을 따로 적을 필요가 없다. - P158

데이터를 처리하는 프로그램의 구조(여러 개의 독립된 단위로 프로그래밍을 동작시키는 주체를 만드는 방법으로 객체 지향 프로그래밍이라고도 한다)를 설계하는 과정이 자바보다 파이썬이 더 쉽다. - P158

한꺼번에 코드를 모두 입력한 후 별도의 실행 과정(이를 컴파일이라고 한다)을 거치는 자바와 달리 파이썬은 코드를 한 줄씩 입력하면서 결과를 확인할 수 있다. 그리고 자바처럼 한꺼번에 코드를 입력한 후 실행하는 것도 가능하다. - P158

AI 빅데이터 분석은 데이터 수집 → 데이터 추출 → 데이터 전처리 → Al빅데이터 모델링 → 모델 평가 → 모델 최적화 → 시각화 과정을 논리적이고 순차적으로 거쳐야 하기에 한 줄씩 코드를 입력하면서 결과를 확인할 수 있는 파이썬이 적합하다. - P158

(파이썬은) 데이터 분석에 필요한 각종 라이브러리가 자바보다 많다. 현재 사이킷런, 텐서플로(Tensorflow), 케라스(Keras), 파이토치(Pytorch) 등 머신러닝 및 딥러닝 관련 라이브러리들은 모두 파이썬에 많이 치중되어 있다. 머신러닝이나 딥러닝을 구현할 때 모든 알고리즘을 혼자서 직접 만드는 것은 사실상 거의 불가능하고 만약에 한다고 해도 효율성이 좋지 않다. 실제 자바나 C 언어로 머신러닝이나 딥러닝을 연구하는 교수님을 본 적이 있다. 파이썬 라이브러리를 활용해서 몇 줄만 프로그래밍하면 끝날 것을 몇백 줄 프로그래밍하고 있었다. 물론 경험과 지식이 쌓인다는 장점이 있지만 시간과 에너지 소모가 굉장히 크다고 생각했다. 여러분이 실무에서 일한다면 기존에 있는 라이브러리를 활용하는 것이 좋다. - P159

"파이썬과 R은 서로의 단점을 보완하므로 둘 다 공부하는 것이 당연히 좋다. 이때는 R을 먼저 공부하는 게 좋다. 만약 한 가지만 공부해야 한다면 파이썬을 공부하자." - P159

(파이썬의 장점) 첫째, 분석 작업 이외에도 다양한 IT 분야의 서비스와 연결할 수 있다는 것이다. 최근에는 웹 또는 앱 기반의 서비스 안에 AI 빅데이터 모델을 포함하는 경우가 많다. 개인 맞춤형 추천 서비스, 물체 인식 서비스, 텍스트 가공 서비스, 자동 분류 서비스 등 인공지능 기반 자동화 기능을 실제 서비스에 활용할 수 있기 때문이다. 이러한 기능을 웹/앱 서비스에 탑재할 때는 파이썬을 사용해야 한다. - P160

둘째, AI 빅데이터 관련 라이브러리가 풍부하다. 인공지능의 핵심 기술인 딥러닝 라이브러리 중 많은 사람이 활용하는 것은 대부분 파이썬 기반이 많다. R도 MXNet, H2O 라이브러리들이 있긴 하지만 파이썬 기반의 파이토치보다는 사용자가 적은 편이다. 이 때문에 공부할 수 있는 관련 책이나 인터넷 자료도 적다. 참고로 텐서플로와 케라스는 파이썬과 R 모두를 지원한다. 하지만 빅데이터를 다루는 부분이나 처리 속도 등에서 파이썬이 더 우수한 편이므로 R로 코딩하는 사례를 찾기가 어렵다. - P160

(파이썬의 단점) 첫째, 시각화 작업이 복잡하다. 데이터 분석 결과를 보고서로 작성하기 위해서는 시각화 기능이 필수인데 파이썬은 R에 비해서 시각화 작업이 복잡하다. 시본seaborn, 맷플롭립Matplotlib과 같은 시각화 라이브러리들은 R과 비교했을 때 단순한 편이다. 또한 한글을 입력하면 제대로 표현되지 않는 성향이 있다. - P161

둘째, R에 비해서 통계나 머신러닝 관련 라이브러리들이 적다. R은 파이썬보다 데이터 분석 관련해서 더 역사가 오래되었기 때문에 사용 가능한 라이브러리 수도 아직까지 더 많다. - P161

(R의 장점) 첫째, 데이터 시각화 기능이다. 가장 유명한 ggplot을 필두로 rgl(Interactive 3D 시각화), htmlwidgets(interactive 시각화), googleVis(구글 차트), vcd(범주형 변수 시각화) 등 시각화 라이브러리가 여러 가지 있다. R의 시각화 기능을 잘 사용하면 데이터 분석 보고서를 예쁘게 꾸밀 수 있다. - P161

둘째, 다수의 데이터 분석용 라이브러리가 존재한다. 2021년 5월 기준 CRAN 패키지 저장소 (CRAN Package repository)에 업로드된 라이브러리 수는 약 17,000개다. 같은 개념의 파이썬의 패키지 저장소인 PyPI에 업로드된 라이브러리 수가 2021년 5월 기준 약 305,000개지만 데이터 분석용 라이브러리의 수는 R보다 적다고 알려져 있다. 이 두 가지 이유는 다수의 통계학, 수학과 교수가 R을 선호하는 이유이기도 하다. - P161

CRAN 패키지 저장소 (CRAN Package repository) : R 패키지를 모아놓은 곳. R 커뮤니티 공식 저장소다. https://cran.r-project.org 참고. - P161

PyPI : 파이썬 패키지를 모아놓은 곳. 파이썬 공식 저장소다. https://pypi.org 참고. - P161

(R의 단점) 첫째, 연산 속도가 파이썬에 비해서 많이 느린 편이다. 방대한 양의 데이터를 처리하는 딥러닝에는 R을 사용하기 어렵다. - P162

둘째, 프로그래밍 언어 문법이 다른 프로그래밍 언어에 비해 유연한 편이므로 처음 공부할 때는 조금 난해할 수 있다. - P162

셋째, 컴퓨터의 메모리를 많이 사용한다. R은 데이터를 분석할 때 물리적 메모리에 데이터를 최대한 저장하는 구조이므로 같은 컴퓨터와 데이터라도 파이썬은 처리하는데 R은 처리할 수 없는 상황이 있다. - P162

파이썬의 장단점을 알고 기본 문법을 공부한 이후에는 다음과 같은 부분을 프로그래밍할 줄 알아야 한다.

데이터 전처리 익히기

가장 먼저 살펴볼 것은 데이터 전처리다. 데이터 전처리에 능숙해져야 데이터 가공, 모델링을 쉽게 할 수 있다. 자주 사용되는 전처리 기술로는 색인화 indexing, 행row 및 열column 삭제, 정렬, 중복 삭제, 누락된 값 채우기, 병합, 피벗, 치환, 값 요약, 반복, 더미 생성, 샘플링 등이 있다. 꽤 많게 느껴지더라도 모두 다 자유자재로 다룰 정도로 익혀야 한다. 그래서 데이터 전처리 기술을 처음 익히는 데는 꽤 큰 노력이 필요할 수 있다. - P163

데이터 전처리는 AI 빅데이터 분석가의 분석 업무 중 80% 정도를 차지한다는 설문 결과도 있을만큼 꽤 중요한 작업이다. 데이터 전처리를 얼마나 빨리 잘 하느냐에 따라서 업무의 성과가 달라질 수 있다. 데이터 전처리에 능숙해지려면 가공되지 않은 원시데이터를 원하는 방향에 맞춰 정리한 데이터로 바꾸는 연습을 많이 해야 한다. - P163

회사나 대학원의 AI 빅데이터 관련 연구실에 소속되어 있다면 선배들이 이미 진절머리나게 데이터를 전처리했을 것이다. 선배들이 작업한 데이터 전처리 전과 후의 데이터를 참고해 똑같이 따라 해보면서 공부해보자. 저자는 데이터 전처리만 3개월 이상 했었던 적도 있다. - P163

파이썬으로 데이터를 전처리할 때는 판다스, 넘파이 라이브러리를 많이 사용하고 R은 dplyr 라이브러리를 많이 사용한다. - P164

만약 숫자 기반 데이터 전처리가 아닌 텍스트 마이닝이라면 텍스트 전처리 기법을 따로 익혀야 한다. - P164

데이터 전처리에 어느 정도 익숙해졌다면 머신러닝과 딥러닝 모델을 만드는 코드를 살펴보고 최대한 이해해두자. 수학, 통계학, 파이썬이나 R의 기본 문법을 이해한다면 머신러닝과 딥러닝 모델 코드를 살펴볼 수 있을 것이다. - P165

머신러닝과 딥러닝 모델 코드는 머신러닝이나 딥러닝 관련 라이브러리 안에 있는 수학, 통계학 개념을 함수로 구현했기 때문에 함수를 불러오고 적절한 파라미터를 넣는 형식으로 작성한다. 즉, 수학과 통계학 개념으로 어떤 함수를 사용할지 선택하는 것이고 파이썬이나 R 기본 문법을 토대로 파라미터와 데이터 타입 등을 살펴보면서 코드를 이해하면 된다. - P165

파라미터를 입력하는 코드 예도 살펴보기 바란다. 파라미터가 무엇인지는 각 라이브러리의 웹 사이트에 공개된 기술 관련 매뉴얼에 예까지 들어 상세히 나온다. 이를 참고하기 바란다. - P165

딥러닝 모델 코드는 머신러닝과는 조금 다르다. 딥러닝은 입력값을 이용해 출력값을 계산하는 상황을 판단하는 뉴런Neuron, 신경망층Layer 등을 어떻게 구성하느냐에 따라서 모델이 달라진다. 그리고 신경망을 구성하는 방식에 정답은 없으므로 무수히 많은 종류의 모델을 구성할 수 있다. 기본 머신러닝 모델의 코드에 비해서는 어려울 수 있다. 하지만 최근에는 복잡한 신경망 구성도 쉽게 도와주는 라이브러리들(대표적으로 케라스)이 생겨나 구현과 이해가 쉬워졌다. - P166

model.add 함수는 신경망층을 쌓는 것이고 Dense 함수는 신경망층별로 뉴런의 개수를 지정한다. Activation 함수는 신경망층별로 적절한 활성화 함수를 넣는 부분이다. - P168

Conv2D (딥러닝의 연산을 효율적으로 하기 위한 ReLU라는 활성화 함수를 사용하는 부분)와 학습의 과적합이나 데이터의 손실을 막는 MaxPooling2D층을 번갈아 쌓은 합성곱층 - P169

합성곱 신경망 Convolutional Neural Network, CNN은 주로 이미지 분류에 쓰이는 모델이다. - P169

input_shape=(150, 150, 3)은 이미지 픽셀 크기가 150×150이고 RGB 컬러를 구성하는 세 가지 색깔이 있다는 뜻이다. - P169

마지막 신경망층[model.add(layers.Dense (1, activation=‘ sigmoid‘ ))]은 뉴런 수를 1로 두고 활성화 함수를 시그모이드sigmoid로 두어 특정 임곗값 이상이면 개 또는 고양이로 분류한다. 이런 식으로 기본 딥러닝 모델의 뼈대만 알면 몇 가지 함수를 조합해서 금방 새로운 신경망을 구성할 수 있다. - P169

기본적인 머신러닝 모델은 파이썬의 사이킷런 라이브러리 안에서 대부분 구현할 수 있다. R은 머신러닝 모델마다 라이브러리 이름이 달라서 구글에 검색해 찾아보면 된다. 딥러닝의 경우 파이썬은 케라스나 파이토치 라이브러리가 가장 많이 사용되고 R은 H2O, MxNet이 많이 사용된다. 개인적으로 딥러닝은 속도나 메모리 관리 면에서 유리한 파이썬을 쓰는 것을 추천한다. - P170

앞에서 소개한 두 가지 사항(데이터 전처리, 머신러닝과 딥러닝 모델 코드 살펴보기)을 일정 수준 공부했다면 시각화, 데이터베이스 또는 API 연동 등에 대해서 공부하길 권한다. - P171

API : 개발자가 만든 기능을 다양한 서비스에서 사용할 수 있도록 정리해놓은 프로그램 결과물(인터페이스)을 말한다. 이 책에서는 인공지능 모델의 기능을 웹이나 앱 서비스에서 사용할 수 있도록 만든 프로그램 결과물을 뜻한다. - P171

R은 파이썬에 비해 시각화에 강점이 있기에 예쁘고 다채롭게 시각화를 하는 예제를 많이 접할 수 있다. 이를 위해서 ggplot2 라이브러리의 각종 함수를 익히면 많은 작업을 할 수 있다. 파이썬은 맷플롭립 및 함께 사용하는 몇 가지 라이브러리를 익히면 된다. - P171

데이터베이스 입출력은 어떤 DBMS를 선택했느냐에 따라서 사용할 수 있는 라이브러리가 각각 다르다. 파이썬을 예로 들면 MySQL은 PyMySQL 라이브러리를 주로 사용하고 PostgreSQL은 psycopg2을 주로 사용한다. 라이브러리 이름은 다르지만 사용 방식은 거의 비슷하다. - P172

API 연동은 인공지능 모델을 응용 프로그램(보통 애플리케이션이라고도 함)과 연결하는 것이다. 저자는 파이썬 웹 애플리케이션을 개발하는 플라스크 Flask라는 프레임워크를 사용한다. 같은 역할을 하며 요즘 더 관심받는 장고 Django라는 프레임워크보다 더 사용하기 쉬워서 API 연동에 적합하다고 생각하기 때문에 추천한다. - P172

인공지능의 핵심은 딥러닝에 있다고 해도 과언이 아니다. 물론 집합의 포함관계로 보면 인공지능이 딥러닝을 포함하는 조금 더 큰 개념이지만, 사실상 최근에는 인공지능=딥러닝으로 받아들여지고 있다. 인공지능 알고리즘의 대다수가 딥러닝으로 구현되고 있기 때문이다. ...(중략)... 딥러닝이란 간단히 말해서 2개 이상의 은닉층으로 이루어진 심층 신경망이다. - P173

정형화된 몇 가지 딥러닝 모델 패턴이 있다. 세부적인 신경망층, 뉴런, 기타 파라미터에 따라 무수히 다양한 모델을 만들 수 있지만 그래도 전체적인 뼈대 네트워크가 비슷한 것들을 포함해서 몇 가지 공통적인 모델을 네이밍한다. 대표적인 몇 가지를 정리하면 다음과 같다.

・심층 신경망(Deep Neural Network, DNN)

・합성곱 신경망(Convolution Neural Network, CNN)

・순환 신경망(Recurrent Neural Network, RNN)

・LSTM(Long Short-Term Memory)

・오토인코더(AutoEncoder)

・Seq2seq(Sequence-to-Sequence) - P174

최근에는 합성곱 신경망, 순환 신경망, LSTM은 기본이고 더 나아가 오토인코더, Seq2seq, ELMo, 버트Bert, 지역 기반 합성곱 신경망 Regin based Convolution Neural Network, R-CNN, YOLO까지 해야 딥러닝을 잘한다고 칭송받는다. 새로운 딥러닝 알고리즘이 나오는 속도가 엄청나서 딥러닝 전문가들도 끊임없이 최신 알고리즘을 공부해야 하는 입장이다. - P175

먼저 기본적인 알고리즘의 개념을 이해하자. 해당 알고리즘의 논문을 읽거나 인터넷에 사람들이 쉽게 해석해놓은 블로그 글들을 읽어도 좋다. 그러나 무작정 처음부터 최신 알고리즘을 읽으면 이해가 거의 불가능할 것이다. 예를 들어 기계번역의 비약적인 성장을 가져온 Seq2seq 알고리즘을 처음부터 보면 아예 이해가 안될 것이다. Seq2seq를 이해하려면 LSTM을 알아야 하고 LSTM을 알려면 RNN을 알아야 한다. 이런 식으로 기초 딥러닝 알고리즘을 알아야 최신 알고리즘을 비로소 이해할 수 있다. 따라서 바로 최신 알고리즘을 익히려하기보다는 가장 기초적인 딥러닝 알고리즘들을 자세히 익히는 게 중요하다. 여기서 핵심은 자세히 알아야 한다는 점이다. 기초적인 딥러닝 알고리즘이 기반이 되어 최신 알고리즘들이 만들어지기 때문에 세부적으로 상세히 알아두어야 한다. - P176

상세히 알아야 할 딥러닝 알고리즘들은 심층 신경망, 합성곱 신경망, 순환 신경망, LSTM, 오토인코더다. 이 정도 알고리즘들은 직접 코드로 하나하나 구현할 줄 알아야 한다. 최근에 나온 시중의 기본적인 딥러닝 책들은 웬만하면 해당 알고리즘들에 대해서 상세히 설명하고 있다. - P177

심층 신경망을 공부할 때에는 가장 기본적인 딥러닝 테크닉에 대해서 익히면 된다. 대개 모델을 학습할 때에는 학습 데이터 train data, 검정 데이터 validation data, 테스트 데이터test data로 나누어 학습을 진행한다. 학습 데이터는 말 그대로 모델을 학습하기 위한 학습셋이다. 검정 데이터는 일종의 모의고사와 비슷하다. 딥러닝은 1회 학습이 아니라 수십, 수백 번의 반복학습으로 이루어진다. 반복학습이 이루어지면서 네트워크 파라미터들이 최적화되도록 수렴하는 것이다. 매 학습이 끝날 때마다 검정 데이터에 모델의 정확도를 테스트하고 이를 바탕으로 파라미터들이 조정되어 그 다음 학습을 진행한다. 테스트 데이터는 최종 학습이 다 끝난 후 최종 모델의 정확도를 평가할 때 사용한다. - P177

그다음으로 손실 함수 Loss function에 대해서도 알아야 한다. 손실함수는 쉽게 말해서 딥러닝 모델이 최적화되기 위한 목표라고 보면 된다. 즉 신경망의 출력값과 목표값 간의 차이를 말한다. 차이는 작을수록 좋으므로 손실 함수가 최소화 되도록 학습이 작동한다. 손실 함수는 딥러닝 모델이 회귀문제이냐 분류문제이냐에 따라서 수식이 달라진다. - P178

역전파Back-propagation에 대한 이해도 있어야 한다. 역전파는 신경망 알고리즘의 가장 기본이 되는 알고리즘이다. 모델의 출력값과 기댓값을 비교하여 차이를 줄여나가는 방향으로 가중치를 업데이트하고 상위층에서 역전파하여 하위층에서 이를 근거로 다시 가중치를 업데이트 하는 방식이다. 쉽게 말하면 출력층의 오차에서 출발하여 거꾸로 체인으로 연결된 뉴런들의 가중치를 순차적으로 조절해나가는 방식이다. 역전파를 이해하려면 미분과 연쇄 법칙chain Rule을 알아야 한다. 이외에도 모델의 과대적합을 줄여주는 드롭아웃, L2 정규화도 알아야하고 활성화 함수들의 종류도 알아야 한다. 이후에도 배치정규화, 옵티마이저 함수들에 대해서도 알아야하니 심층 신경망 하나만 공부해도 딥러닝에 대해서 많은 것을 공부하게 된다. - P178


댓글(0) 먼댓글(0) 좋아요(9)
좋아요
l 공유하기 l 북마크하기찜하기 lthankstoThanksTo