클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

딥러닝 2 - 딥러닝 기초 학습 2 : 역사와 학습 로드맵 및 첫번째 딥러닝 프로젝트 시작하기 본문

인공지능/딥러닝

딥러닝 2 - 딥러닝 기초 학습 2 : 역사와 학습 로드맵 및 첫번째 딥러닝 프로젝트 시작하기

huenuri 2024. 9. 21. 11:55

평일에는 아침을 먹기 힘들지만 주말에는 조금 여유로워서 아침도 먹을 수 있었다. 하지만 앞으로는 아침을 먹는 습관도 길러보려고 한다. 점심 때까지 쫄쫄 굶다가 밥을 먹으면 인스턴트의 유혹에도 더 잘 빠지는 것 같았다.

오늘은 아침에 일정이 있어서 아침 공부는 1시간밖에 못할 것 같다. 그래도 적은 시간이라도 공부를 하는 것과 안 하는 것은 천지 차이이다. 일을 보다가 남는 시간이 있으면 정처기 실기 공부를 진행해보려고 한다.

 

그럼 오늘의 아침 공부를 시작해보자! 이틀만에 딥러닝 공부를 다 마치지 못할 수도 있을 것 같다. 그래도 최선을 다해 공부해볼 것이다. 딥러닝 수업은 엘리스에 없어서 조금 아쉽다.


 

 

 

딥러닝의 역사와 학습 로드맵

 

 

딥러닝 즉 인공지능의 역사는 매우 오래 전부터 시작되었다. Perceptron은 뉴런을 담당하는 모델이라고 보면 된다. 중간 중강의 위치를 받아 문제를 해결해나갔으나 별로 성과가 없었다. 그러다보니 2000년대 초에는 딥러링보다는 머신러닝을 활용하는 것이 더 좋겠다는 의견이 지배적이었다. 2010년대 들어서는 어느 정도 성과를 보이다가 2015년에 알파고가 등장하면서 신경망이 결과물을 낼 수 있음을 깨닫고, 이때부터 본격적인 투자가 시작되었다.

이 시점에는 데이터의 양도 충분하고, 활용할 수 있는 GPU 자원도 높으며, 학습하는 알고리즘도 갖추어진 상태이다. 과거에는 이 3가지 중 한 가지 이상은 빠진 상태였다. 알파고가 등장한 시점에는 이 세 가지가 갖추어진 상태가 되어 투자도 폭발적으로 일어나고 딥러닝이 발달하게 되었다.

 

현재는 인공지능이 많이 발전했고 사람의 언어를 기반으로 하는 chat-gpt가 발달된 현황이다.


 

 

 

 

Part1에서 기초 이론에 대한 것을 다루는데 이 3가지는 필수적으로 알아야 하는 것들이다. Part2에서는 실제 효과적인 결과를 냈던 신경망에 대해서 배우게 된다. 이 2개의 알고리즘 덕분에 영상 처리, 텍스트 분야에서 좋은 결과를 낼 수 있었다. Part3에서는 각 도메인 나누어 공부해야 한다. 그 외에 생성 모델과 딥러닝 기반의 강화 학습도 있다.

Part3 정도를 가면 자신이 관심있는 분야를 집중적으로 공부하는 것이 좋다. 우리 수업에서는 Part1과 2 그리고 Part3에서는 이미지 데이터와 텍스트 데이터 알고리즘을 배우게 될 것이다.


 

 

 

기존 머신러닝과의 비교

 

 

머신러닝과 딥러닝 모두 데이터를 입력하여 기계에게 스스로 학습할 수 있는 알고리즘을 만드는 것은 같다. 모델이 잘 예측했는지 알기 위해 모델의 예측값과 실제값을 비교해서 측정하는 작업을 하게 된다. 이 과정을 오차를 수정한다고 한다. 오차를 구하는 것은 lost 혹은 cost function(손실 /비용함수)이다.

오차가 크면 현재 모델은 학습이 잘 안된 것이고, 오차가 작으면 학습이 잘 된 것이다. 측정된 모델을 기반으로 현재 모델을 수정해 주어야 한다. 측정값을 기준으로 가중치를 수정하는 작업을 optimizer 최적화한다고 한다.

그런 다음 마지막으로 몇 %의 성능을 갖는지 모델 성능을 측정한다. 

 

하지만 딥러닝은 학습하는 알고리즘이 다르다. 퍼셉트론, 신경망 기본의 알고리즘을 사용한다.

 

 

 

 

 

 

 

기존의 머신러닝과 비교할 때 사람이 얼마나 개입하느냐에 따라 차이점을 기술한다. 과거에는 인공지능을 만들기 위해 사람이 직접 규칙을 작성했었다. 기존에 있는 데이터를 보고 조건을 직접 만들어서 코드를 작성하는 식이다. 초기의 인공지능 모델로 이때는 학습을 활용하지 않았다. 하지만 데이터가 점차 많아지고 정교화해짐에 따라 사람이 규칙을 발견하지 못하는 상황이 발생한다.

그래서 등장한 것이 기계가 스스로 학습을 하는 머신러닝이라는 개념이다. 데이터를 전처리하는 작업은 사람이 직접 선택을 해야 했다. 하지만 딥러닝에 들어서서는 사람이 개입할 필요가 거의 없어졌다. 사람이 거의 개입을 하지 않는데도 신경망이 스스로 학습해서 좋은 결과를 만들어낼 수 있다.

 

아직까지는 사람의 손을 완전히 떼는 딥러닝은 존재하지 않고 어느 정도 사람의 손이 가야 하지만, 앞으로는 사람의 손을 전혀 거치지 않고 기계 학습이 되는 시점이 올 것 같다.


 

 

 

 

 

 

머신러닝이 딥러닝보다 유용한 시점도 있다. 집 앞의 편의점을 가는데 트럭을 타고 가는 것은 효율적이지 않다. 딥러닝은 머신러닝보다 훨씬 무겁고 연산도 많이 한다. 간단한 작업이라면 머신러닝을 쓰는 게 훨씬 좋은 경우도 있다.

 

 

 

 

 

 

이런 데이터들의 공통점은 사람이 규칙을 찾기 어려울만큼 복잡한 데이터라는 것이다.


 

 

 

딥러닝 개발 환경

 

 

딥러닝을 개발할 수 있는 환경들이다. 자바로도 딥러닝을 개발할 수 있도록 만들어져 있다. 하지만 독보적인 것은 파이썬이다. 파이썬 생태계는 워낙 잘 갖추어져 있어 텐서플로나 파이토치가 거의 독식하고 있다.

 

 

 

 

 

케라스는 원래 텐서플로와 별도로 분리된 프로젝트였다. 텐서플로가 복잡해서 좀더 간단하게 쓸 수 있는 패키지가 없을까 하다가 케라스를 만들어냈다. 사람들이 케라스를 많이 사용하니 케라스의 내용을 텐서플로가 가져갔다. 요즘에는 텐서플로를 설치하면 케라스가 내장되어 있다.

 

 

 

 

 

로컬에 딥러닝 환경을 구축할 수도 있지만 딥러닝은 GPU 자원이 많이 든다.

 

 

 

 

 

 

그렇기에 클라우드 기반의 코랩 환경을 많이 사용하는 편이다. 코랩의 단점은 데이터가 휘발성이 있어 껐다가 켜면 날아간다는 것이다. 그럼에도 빠른 시간 내에 학습을 시킬 수 있는 좋은 플랫폼 중의 하나이다.


 

 

 

 

코랩으로 딥러닝 맛보기 실습해보기

 

실습을 하려면 데이터가 필요하므로 구글 드라이버에 만든 데이터 파일에 파일을 업로드해준다.

 

 

잘 연결이 되었다면 드라이브 마운트가 연결된 상태로 다음과 같은 그림이 표시된다. 그냥 폴더 모양이라면 드라이브 마운트가 활성화되지 않은 상태이다.


 

 

 

pwd를 치면 현재 작업 중인 폴더를 볼 수 있다. 현재 작업 중인 content에서 ls를 찍어보면 폴더가 2개 보인다. 하지만 폴더의 주소가 길기 때문에 작업 디렉토리를 딥러닝 폴더로 이전시켜볼 것이다.

change directory의 약자 %cd를 쓰고 문자열로 폴더 경로를 지정한다.


 

 

 

 

파일을 불러올 때 점을 찍지 않아서 코드 오류가 났다. 이 부분을 꼭 기억하자.


 

 

 

 

이 표에서 최종 성적을 예측하는 모델을 만들어볼 것이다. 성적에 영향을 줄 것 같은 특성 하나를 골라 만들어본다.


 

 

 

 


 

 

 

학습을 마치고

공부가 너무 재미있어서 1시간 반이 다 지나고 있는데도 몰랐다. 아침에 일정이 있었는데 조금 늦어지고 말았다. 그래도 이제 아침 공부는 여기서 마치기로 했다. 공부가 이처럼 재미있는 것인줄 왜 이제야 안 것인지 후회가 된다. 5년만 더 개발 공부를 일찍 시작했더라면 얼마나 좋았을까 하는 생각을 하기도 하지만, 지금이 공부하기에 가장 적당한 때인 것이다.

공부를 하며 내가 결코 부족한 사람이 아니라는 걸 느끼게 되었다. 공부도 충분히 잘할 수 있으며 안 해서 그동안 못했던 것이지 마음만 먹으면 얼마든지 할 수 있다.