태그 보관물: 머신러닝

기억하는 신경망 LSTM(Long Short-Term Memory), 어떻게 작동할까?

LSTM(Long Short-Term Memory)은 순환 신경망(Recurrent Neural Network, RNN)의 한 종류로서, 시퀀스 데이터 (시계열 데이터, 텍스트 등)를 처리하기 위해 신경망 입니다. 이전에 배운 것들을 기억할 수 있도록 컴퓨터 의 “일기장” 을 바로 LSTM 이라고 할 수 있습니다. 즉, “일기장”을 찾아보면서 이전에 무슨 일이 있었는지 확인을 할 수 있으며 미래에 무슨 일이 일어날지 예측을 할 수 있습니다.

예를 들어, 작곡을 할 때, LSTM은 이전에 어떤 음이 나왔었는지 기억하고, 그 다음에 어떤 음이 나와야 할지 도와줍니다. 현재도 실제로 아티스트들은 이미 Ai를 통해 작곡을 하고 수 있습니다.

RNN(순환 신경망)은 이전 시점의 출력을 현재 시점의 입력에 포함시켜 정보를 순환시키는 구조를 가지고 있습니다. 하지만, 시퀀스가 길어질수록 이전 시점의 정보가 잘 전달되지 않는 ‘장기 의존성 문제’ 를 해결하기 위해 ‘셀 상태’라는 개념을 도입했습니다. 셀 상태는 LSTM 셀을 통과하는 동안 정보를 전달하는 ‘Information Highway’와 같습니다. LSTM에서는 게이트라는 구조를 통해 셀 상태에 어떤 정보를 추가하거나 제거할지 결정합니다. 이로 인해 LSTM은 긴 시퀀스에서도 이전 정보를 잘 기억하고 전달할 수 있습니다.

이 이미지는 LSTM “셀”의 내부 구조를 보여줍니다. 각각의 작은 박스는 다른 역할을 하는 “게이트”를 나타내고, 화살표는 정보가 어떻게 이동하는지를 보여줍니다. 이 중 가장 중요한 부분은 가장 위에 있는 수평선인 ‘셀 상태’입니다. 바로 “일기장”과 같은 역할을 하며 이를 통해 LSTM은 장기적인 정보를 저장하고 전달할 수 있습니다.

LSTM 활용 사례 : 자연어 처리(Natural Language Processing, NLP)

LSTM(Long Short-Term Memory)은 자연어 처리(NLP) 분야에서 탁월한 성능을 발휘하는 순환 신경망(RNN)의 한 종류입니다. 텍스트 데이터의 시간적 흐름과 문맥을 효과적으로 처리하여 다양한 NLP 작업에 활용되고 있습니다.

자연어처리(NLP)는 우리가 사용하는 자연어를 컴퓨터가 이해하고 처리할 수 있도록 돕는 기술입니다. 예를 들어, 우리가 “장보기 목록에 계란과 우유 추가”라고 말할 때, 인간은 이 말을 쉽게 이해하지만, 컴퓨터는 이를 처리하기 어려운 비구조적인 텍스트로 간주합니다. NLP는 이러한 비구조적인 텍스트를 컴퓨터가 이해할 수 있는 구조화된 형태로 변환합니다.

*참고: IBM Technology 영상 : 내용정리가 상당한 수준이라 강추!!

NLP는 크게 두 가지 중요한 과정, 즉 자연어 이해(NLU)와 자연어 생성(NLG)으로 나뉩니다. NLU는 비구조적 데이터를 구조적으로 변환하는 과정이며, NLG는 구조적 데이터를 다시 비구조적 데이터로 변환하는 과정입니다.

NLP의 주요 활용 사례

  • 기계 번역: NLP는 문장 전체의 맥락을 이해하여 정확한 번역을 제공합니다. 예를 들어, “정신은 의지가 있지만, 육체는 약하다”라는 문장을 번역할 때, 단어 단위 번역이 아닌 문맥을 고려하여 번역이 필요합니다.
  • 가상 비서 및 챗봇: Siri나 Alexa와 같은 가상 비서는 사용자의 음성 명령을 이해하고 실행합니다. 또한, 챗봇은 사용자의 글을 이해하고 이에 맞는 답변을 제공합니다.
  • 감정 분석: 이메일이나 제품 리뷰를 분석하여 긍정적인 감정인지, 부정적인 감정인지, 심지어는 비꼬는 표현이 포함된 것인지 판단합니다.
  • 스팸 감지: 이메일 메시지에서 스팸을 판별하는 데에도 NLP가 활용됩니다. 과도하게 사용된 단어, 부적절한 문법, 긴급함을 강조하는 표현 등을 통해 스팸 여부를 판단할 수 있습니다.

NLP의 동작 원리

NLP(자연어처리)는 하나의 알고리즘만 사용하는 것이 아니라, 여러 도구들을 조합해서 다양한 문제를 해결합니다. NLP가 작동하는 과정을 쉽게 설명하면 다음과 같습니다.

먼저, 컴퓨터가 처리할 텍스트는 비구조적 텍스트입니다. 예를 들어, 사람이 쓰는 일상적인 문장들이 바로 비구조적 텍스트죠. 이 텍스트는 컴퓨터가 바로 이해하기 어려운 형태이기 때문에, 먼저 **토큰화(tokenization)**라는 과정을 거쳐서 텍스트를 작은 단위로 나눕니다. 예를 들어, “오늘 날씨는 맑아요”라는 문장이 있으면, 이 문장은 “오늘”, “날씨는”, “맑아요”처럼 작은 단어로 나눠집니다.

이후, 각 단어의 어근 추출(stemming) 또는 **표제어 추출(lemmatization)**을 통해 단어의 기본 형태를 찾습니다. 예를 들어, “달리다”, “달린다”, “달리고”와 같은 단어들이 있을 때, 이들을 “달리다”라는 기본형으로 바꾸는 작업이 이루어집니다.

그 다음에는 각 단어가 문장에서 어떤 역할을 하는지 판단하는 **품사 태깅(part-of-speech tagging)**을 합니다. 예를 들어, “밥을 먹다”라는 문장에서 “밥”은 명사이고 “먹다”는 동사라는 것을 구분하는 과정입니다.

또한, **명명된 엔티티 인식(NER)**을 통해 텍스트 속에 중요한 정보가 있는지 확인합니다. 예를 들어, “서울에 있는 경복궁은 유명한 관광지입니다”라는 문장에서 “서울”은 장소, “경복궁”은 특정 명사(관광지의 이름)로 인식됩니다.

이 모든 과정을 거친 후, NLP는 인간이 사용하는 언어를 컴퓨터가 이해할 수 있는 구조적 데이터로 변환합니다. 이 구조적 데이터는 이후 다양한 AI 응용 프로그램에서 활용될 수 있습니다.

대형 언어 모델(LLM)의 작동 원리와 학습 과정

요즘 ChatGPT 번역 능력이 너무 좋아서 가끔이게 진짜 사람이랑 뭐가 다르지?” 싶은 순간이 많습니다. 영화나 원서 번역 실무현장에서도 실제로 많이 사용되고 있죠. 그런데 모델들은 어떻게 이렇게 방대한 지식을 쌓고 발전할까요? 그냥 인터넷에 있는 내용을 긁어다가 정리하는 걸까요? 아니면 진짜로 무언가를 배우고 기억하는 걸까요?

1. LLM의 기본 원리

1) 텍스트를 숫자로 바꾸는 첫걸음: 토큰화와 임베딩

AI가 인간처럼 텍스트를 이해하려면, 우선 글자를 숫자로 바꾸는 과정이 필요합니다. 예를 들어 “고양이”라는 단어를 숫자로 바꾸면, LLM은 (0.24, -0.5, 1.2, …) 같은 벡터로 변환해 저장하게 됩니다. 우리는 이 과정을 토큰화(Tokenization) → **임베딩(Embedding)** 이라고 정의 합니다.

이렇게 변환된 숫자 벡터들은 결국 컴퓨터가 이해할 수 있는 형태가 되며, 각 단어(혹은 토큰) 사이의 관계를 학습하는 데 활용이 되고 있습니다.

2) 핵심 기술: 트랜스포머(Transformer) 아키텍처

LLM의 심장은 바로 트랜스포머(Transformer) 모델 입니다. 이 구조에서 가장 중요한 개념은 **어텐션(Attention)**이라고 부르는 메커니즘인데, 간단히 말하면 “문장에서 어떤 단어가 중요한지 찾아내는 기술” 입니다.

*출처 : AISchool – ChatGPT의 원리 – 대규모 언어 모델 (LLM) 개념 정리

예를 들어 “나는 어제 밤에 고양이와 놀았다.”라는 문장이 있으면, “놀았다”라는 동사가 어떤 대상과 연결되는지(즉, “고양이”)를 이해해야 해. 어텐션 메커니즘은 이런 관계를 자동으로 찾아주고, 문맥을 더 깊이 있게 파악할 수 있도록 도와줄 수 있지요 ㅎ

2. LLM이 지식을 쌓는 과정

1) 첫 번째 단계: 사전 학습(Pre-training)

지능형 언어 모델(LLM)은 처음부터 인간처럼 지능적이지 않습니다. 수많은 학자들의 연구와 개발을 통해, LLM은 방대한 양의 텍스트 데이터를 학습하는 사전 학습(Pre-training) 단계를 거칩니다. 이 과정에서 모델은 문법, 어휘, 문맥 등 언어의 다양한 패턴을 이해하게 됩니다. 이러한 사전 학습을 통해 LLM은 언어에 대한 기본적인 이해를 습득하며, 이후 특정 작업이나 분야에 맞게 **미세 조정(Fine-tuning)**을 통해 성능을 향상시키게 됩니다.

  1. 대량의 텍스트 데이터 수집: 인터넷에 있는 위키백과, 뉴스, 논문, 소설, 블로그 등을 수집합니다.
  2. 패턴 학습: 문장에서 단어가 어떤 순서로 등장하는지, 문법적으로 어떤 규칙이 있는지를 학습 하구요.
  3. 다음 단어 예측(NWP, Next Word Prediction): “나는 어제 밤에 ___와 놀았다.” 같은 문장에서 빈칸에 어떤 단어가 올지 맞히는 방식으로 학습이 진행됩니다.

이 과정을 거치면서 모델 내부의 수많은 **파라미터(Parameters, 가중치)**가 업데이트되며 지식이 축적이 되는 구조에요.

예제: “나는 커피를 마셨다.” 같은 문장을 보면, LLM은 과거 데이터를 참고해 “커피”와 자주 등장하는 단어(예: 마시다, 카페인, 아침)를 예측하는 식으로 학습해.

2) 두 번째 단계: 미세 조정(Fine-tuning)

사전 학습을 마친 모델은 말 그대로 “기본적인 언어 감각”을 익힌 상태가 됩니다. 하지만, 이를 좀 더 특정한 분야(예: 법률, 의학, 코딩)에 맞게 조정하는 게 바로 미세 조정(Fine-tuning) 단계 를 거쳐야 다음 단계로 나아 갈 수 있습니다.

*출처 : 모두의연구소 -LLM 모델 기반 서비스 실전 가이드

  • 의학 챗봇이라면? → 의료 논문과 진료 기록을 추가 학습시킴
  • 법률 AI라면? → 판례와 법 조항을 학습시킴
  • 코딩 AI라면? → GitHub의 코드 저장소 데이터를 학습시킴

이 과정 덕분에 같은 LLM이라도 활용 분야에 따라 맞춤형 성능을 낼 수 있게 됩니다.

3) 세 번째 단계: 인간 피드백을 통한 강화 학습(RLHF)

ChatGPT 같은 모델들은 단순히 데이터를 학습하는 것에서 끝나지 않고, **RLHF(Reinforcement Learning from Human Feedback, 인간 피드백을 통한 강화 학습)**라는 과정도 거치게 됩니다.

쉽게 말하면 사람들이 모델의 응답을 평가하고, 더 좋은 답변을 만들도록 모델을 조정하는 과정 입니다.

  1. AI가 답변을 생성하면, 사람 평가자가 “이 답변이 괜찮은지”를 평가함.
  2. 평가를 바탕으로 AI가 더 좋은 답변을 하도록 가중치를 조정함.
  3. 이 과정을 반복하면서 모델의 품질이 점점 개선됨.

이렇게 하면 LLM이 엉뚱한 소리를 하거나, 부정확한 정보를 제공하는 확률을 낮출 수 있는 것 입니다.

3. LLM의 한계와 미래

1) 기억력이 부족하다?

LLM은 대화를 나눌수록 이전 내용을 잊어버리는 경우가 많아. 기본적으로 긴 맥락을 유지하는 능력이 제한적이기 때문일 수도 있어요.

*출처 : 엔드플랜 Endplan AI

  • 해결책으로 메모리 모듈을 추가하거나, RAG(Retrieval-Augmented Generation) 같은 검색 기반 기술을 접목하는 연구가 활발하게 진행 되고 있습니다.

2) 학습 데이터가 편향될 수 있다?

AI가 인터넷에서 학습하다 보면, 데이터에 담긴 **편향(Bias)**이 그대로 반영될 위험이 있어.

  • 이를 해결하기 위해 다양한 문화, 언어, 성별, 인종을 고려한 데이터셋을 구축하려는 노력이 진행 중입니댜.

3) 업데이트가 쉽지 않다?

한 번 학습된 모델을 다시 업데이트하려면 엄청난 계산 비용이 들게 되기 때문에 최근에는 “LoRA, Adapter Layers” 같은 기법을 활용해, 기존 모델을 빠르게 업데이트하는 방법이 연구되고 있다고 합니다.

LLM이 어떻게 지식을 쌓고 발전하는지 간단하게 한마디로 정리하자면

  • 사전 학습 → 엄청난 양의 텍스트를 읽고 패턴을 익힘
  • 미세 조정 → 특정 분야에 맞춰 추가 학습
  • 인간 피드백 반영 → 더 나은 답변을 생성하도록 튜닝

결론적으로, LLM은 지속적인 발전을 거듭하며 단순한 언어 생성 도구를 넘어 인간의 창의성과 협업하는 강력한 도구로 자리 잡아가고 있습니다. 지금 이 순간에도 새로운 AI 기술과 정보가 쏟아지고 있으며, 이러한 변화를 효과적으로 활용하는 것이 중요합니다. 변화의 흐름에 맞춰 AI를 이해하고 실용적으로 활용하는 방법을 익혀 나간다면, 더 많은 가능성을 열어갈 수 있을 것입니다.

딥러닝이란? 개념 잡기

Deep Learning 은 인간의 뇌에서 영감을 받은 인공 신경망을 사용하여 컴퓨터가 학습하는 머신 러닝 의 방법 중 하나로, 음악을 만들거나, 우리가 오렌지와 사과를 보고 각각 다른 과일이라고 인식할 수 있는 것 처럼 컴퓨터가 사진이나 사물을 보고 이해할 수 있거나 언어를 이해하는 방법을 학습 하는 것이라고 정의할 수 있습니다. ‘Deep’ 이라는 단어는 신경망에 여러 층(레이어)을 쌓아 깊게 만든다는 의미입니다. 이러한 깊은 네트워크를 통해 컴퓨터는 복잡한 문제를 해결하는 데 필요한 패턴이나 관계를 스스로 찾아낼 수 있습니다. 딥러닝은 이미지 인식, 음성 인식, 자연어 처리 등 다양한 분야에서 활용되고 있습니다.

Deep Learning (딥 러닝) 의 개념

간략히 딥러닝의 역사를 살펴보면, 가장 초기의 인공 신경망인 퍼셉트론(Perceptron)이 1958년에 제안되었습니다. 이후 1986년에 다층 퍼셉트론(Multilayer Perceptron)이 제안되고, 이를 학습시키는 방법인 역전파(Backpropagation) 알고리즘이 등장하면서 딥러닝의 기초가 마련되었습니다.

퍼셉트론은 간단한 문제를 해결하는 컴퓨터의 작은 뇌(Brain)와 같습니다. 모아진 퍼셉트론은 복잡한 문제도 해결할 수 있게 되는데, 이것이 바로 딥러닝, 즉 ‘깊은 학습’입니다. 인간의 뇌에는 “뉴런(Neuron)” 이 수억 개 있고, 이들이 함께 작동하여 생각하고, 느끼고, 기억하는 데 도움을 줍니다. 퍼셉트론은 이런 뉴런을 모방한 것으로, 간단한 계산을 수행하고 문제를 해결합니다.

뉴런_퍼셉트론
뉴런과 퍼셉트론의 비교

뉴런은 덴드라이트(작은 섬유)를 통해 다른 뉴런으로부터 입력 신호를 받습니다. 마찬가지로, 퍼셉트론은 숫자를 받는 입력 뉴런을 통해 다른 퍼셉트론으로부터 데이터를 받습니다. 생물학적 뉴런에서, 출력 신호는 축삭에 의해 운반 됩니다. 마찬가지로, 퍼셉트론의 축삭은 다음 퍼셉트론의 입력이 될 출력 값 입니다. 덴드라이트와 생물학적 뉴런 사이의 연결 지점은 “시냅스” 라고 정의 합니다. 입력과 퍼셉트론 사이의 연결은 ”가중치“ 라고 정의 합니다. 그들은 각 입력의 중요성 수준을 측정 할 수 있는 지표가 됩니다. 뉴런에서, 핵은 덴드라이트가 제공하는 신호를 기반으로 출력 신호를 생성 합니다. 마찬가지로, 퍼셉트론의 핵(파란색)은 입력 값을 기반으로 몇 가지 계산을 수행하고 출력을 생성합니다.

딥러닝 개념이 시작한 초기에는 컴퓨터의 성능이 부족하여 복잡한 신경망을 학습시키기 어려웠습니다. 2000년대 초반에 들어서 GPU가 발전하고 빅 데이터가 확산되면서 딥러닝은 크게 주목받게 되었습니다. 이 중 2012년에 딥러닝 모델인 AlexNet이 이미지 인식 대회에서 우승하면서 딥러닝은 성능을 인정받게 되었습니다.

2016년에 세계 챔피언 이세돌 9단과 바둑 대국에서 승리하면서 전 세계적으로 주목 받았던 알파고는 Google의 딥마인드(DeepMind) 팀이 개발한 딥러닝과 강화학습 으로 탄생한 기술 입니다. 딥러닝은 바둑판의 상태를 해석하고 다음 수를 예측하는 데 사용되었고 강화학습은 알파고가 자기 자신과 게임을 하면서 수천만 개의 바둑 기보를 분석하고 스스로 학습하느여 어떤 수가 승리에 이르는 방법을 학습하여 바둑의 복잡성을 이해하고, 강화학습을 통해 전략을 최적화하여 인간과 바둑을 둘 수 있게 되었습니다.

딥러닝은 이미지 분석, 음성 인식, 자연어 처리 등 다양한 분야에서 뛰어난 성능을 보이며 머신러닝 분야의 주요한 연구 방향이 되고있습니다.

KNN, 서포트 벡터 머신, 의사결정 트리

머신러닝 알고리즘은 데이터에서 패턴을 찾아내어 예측을 하거나 분류하는 등의 문제를 해결합니다. 지도학습은 레이블이 있는 데이터 셋을 통해 알고리즘으로 데이터를 구별하는 판별식을 만든 후 새로운 데이터가 어떠한 결과를 출력하는지 알아내는 학습 모델 입니다. 즉, 지도학습은 과거의 데이터를 학습해서 결과를 예측하는 방법 입니다.

‘지도학습’ 에 해당되는 세 가지 머신러닝 알고리즘 – KNN(K-Nearest Neighbors), 서포트 벡터 머신(Support Vector Machine), 의사결정 트리(Decision Tree) 에 대하여 간단한 파이썬 예제를 통해 머신러닝 알고리즘에 대해 연습해볼 수 있습니다.

pip install scikit-learn numpy

1. KNN(K-Nearest Neighbors)

KNN은 지연 학습(lazy learning) 방식에 속하는 알고리즘으로, 새로운 데이터 포인트를 분류할 때 학습 데이터셋 내에서 가장 가까운 K개의 이웃 데이터를 찾습니다. 이웃들의 다수결(voting) 혹은 평균 등을 사용해 예측 결과를 도출합니다.

  • 장점: 구현이 간단하고, 직관적이며, 파라미터 조정이 비교적 쉽습니다.
  • 단점: 데이터가 많아지면 계산 비용이 증가하고, 이상치(outlier)에 민감할 수 있습니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 아이리스(iris) 데이터셋 로드
iris = load_iris()
X = iris.data
y = iris.target

# 데이터를 학습용과 테스트용으로 분할 (70%:30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN 분류기 생성 (k=3)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 테스트 데이터로 예측 수행
y_pred = knn.predict(X_test)
print("KNN 정확도:", accuracy_score(y_test, y_pred))

2. 서포트 벡터 머신 (SVM)

SVM은 데이터를 분리하는 최적의 결정 경계(hyperplane) 를 찾는 알고리즘입니다. 특히, 클래스 간의 마진(margin)을 최대화하는 결정 경계를 도출하여 분류 성능을 향상시킵니다.

  • 장점: 고차원 데이터에서도 효과적이며, 커널 트릭(kernel trick)을 통해 비선형 문제도 해결할 수 있습니다.
  • 단점: 데이터의 크기가 크거나 노이즈가 많을 경우 계산 비용이 증가할 수 있고, 파라미터 튜닝이 필요합니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 아이리스 데이터셋 로드
iris = load_iris()
X = iris.data
y = iris.target

# 데이터를 학습용과 테스트용으로 분할 (70%:30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# SVM 분류기 생성 (선형 커널 사용)
svm = SVC(kernel='linear', random_state=42)
svm.fit(X_train, y_train)

# 테스트 데이터로 예측 수행
y_pred = svm.predict(X_test)
print("SVM 정확도:", accuracy_score(y_test, y_pred))

3. 의사결정 트리 (Decision Tree)

의사결정 트리는 데이터를 분할하는 기준(특성)을 순차적으로 선택하여, 트리 형태의 모델을 구성합니다. 각 노드에서 데이터를 특정 기준에 따라 분할함으로써, 최종적으로 각 리프 노드에서 클래스에 대한 예측을 수행합니다.

  • 장점: 결과 해석이 용이하고, 시각화가 가능하여 모델 이해도가 높습니다.
  • 단점: 과적합(overfitting)에 취약할 수 있으며, 작은 변화에도 모델 구조가 크게 달라질 수 있습니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 아이리스 데이터셋 로드
iris = load_iris()
X = iris.data
y = iris.target

# 데이터를 학습용과 테스트용으로 분할 (70%:30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 의사결정 트리 분류기 생성
tree = DecisionTreeClassifier(random_state=42)
tree.fit(X_train, y_train)

# 테스트 데이터로 예측 수행
y_pred = tree.predict(X_test)
print("의사결정 트리 정확도:", accuracy_score(y_test, y_pred))

사실, 머신러닝은 더 깊게 들어가면 어려운 책 몇권 이상으로도 설명이 필요한 영역이지만 세 가지 모델 모두가 머신러닝을 이해하기 위한 기초적인 모델이기 때문에 간단하게 개념적으로 블로그에 올리게 되었습니다. 이론적인 배경 지식도 중요하지만, 각각의 알고리즘을 실제 데이터셋에 적용해보면서 실제로 코딩하면서 느끼는 경험을 하면 머신러닝에 좀더 쉽게 다가갈 수 있지 않을까요?

MNIST Dataset에 대하여

MNIST는 ‘Modified National Institute of Standards and Technology’의 약자로, 미국의 표준 기술 연구소에서 생성된 원래의 NIST 데이터셋을 수정하여 만들었습니다. 이 데이터셋은 손으로 쓴 숫자들의 이미지를 포함하고 있습니다. 이 데이터셋은 기계 학습 분야의 연구에 널리 사용되며, 특히 이미지 처리를 위한 벤치마크로 사용됩니다.

MNIST 데이터 셋

MNIST 데이터셋은 총 7만 개의 이미지로 구성되어 있습니다. 각 이미지는 28×28 픽셀로 이루어져 있고, 숫자 0부터 9까지를 손으로 쓴 글씨를 담고 있습니다. 이 중 6만 개는 훈련 데이터로, 1만 개는 테스트 데이터로 사용됩니다.

MNIST 데이터셋은 약 1990년대에 Yan LeCun, Corinna Cortes, 그리고 Christopher J.C. Burges에 의해 개발되었다고 합니다. 그들이 MNIST 데이터셋을 처음 만들었을 때, 그들의 주요 목표는 기계학습 알고리즘이 얼마나 잘 작동하는지 평가하고, 다양한 알고리즘 간에 성능을 비교하는 표준적인 벤치마크를 제공하는 것이 목적 이었으나 현재는 이 데이터셋을 생성함으로써, 머신러닝의 ‘비지도학습’ 에 해당하는 알고리즘(로지스틱 회귀, 서포트 벡터 머신, 신경망 등) 을 통해서 보다 큰 규모의 데이터셋의 성능 테스트와 훈련이 가능하게 되었습니다.

데이터셋의 크기와 다양성, 그리고 쉽게 접근할 수 있는 특징 덕분에, 우리가 보통 프로그램언어를 처음 배울때 개발하는 ‘Hello, World!’ 프로그램 처럼 MNIST는 머신러닝과 딥러닝 을 배우면서 처음 시도하는 프로그래밍 이라고 생각하면 될듯합니다.

MNIST 데이터셋은 비교적 간단한 구조를 가지고 있지만, 이미지 인식(캡챠, 사물 이미지 인식 등) 분야에서의 다양한 기법을 실험하고 평가하는 데 매우 유용합니다. Keras 라이브러리를 통해 아래 짧은 코드로 간단히 수행해 볼 수 있습니다.

수행 전 tensorflow 와 keras 가 설치가 되어있지 않으면 꼭 설치해야 합니다.

pip install tensorflow keras
from keras.datasets import mnist
# MNIST 데이터셋을 로드합니다.
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# train_images의 shape를 출력합니다.
print(train_images.shape)  # (60000, 28, 28)이 출력됩니다.
# train_labels의 첫 10개를 출력합니다.
print(train_labels[:10])  # [5 0 4 1 9 2 1 3 1 4]와 같이 출력됩

Iris Dataset 에 대하여

Iris 데이터셋은 통계학과 머신러닝에서 자주 사용되는 데이터셋 중 하나입니다. 이 데이터셋은 붓꽃(Iris)의 품종을 분류하기 위한 데이터셋으로, 총 세 가지 품종(Setosa, Versicolor, Virginica)의 정보가 각각 50개씩 총 150개의 샘플로 구성되어 있습니다.

Iris 데이터셋

출처 : Wikipedia

각 샘플은 아래와 같은 네 가지 특징을 가지고 있습니다.

  1. 꽃받침(sepal)의 길이
  2. 꽃받침의 너비
  3. 꽃잎(petal)의 길이
  4. 꽃잎의 너비

Iris 데이터셋의 각 샘플은 이 네 가지 특징에 대한 수치와 그에 해당하는 붓꽃의 품종으로 구성되어 있습니다. 이 데이터셋은 각 특징들 간의 관계를 분석하거나, 머신러닝 모델을 학습시키는데 주로 사용됩니다. Iris 데이터셋은 다양한 머신러닝 알고리즘과 유용한 도구가 포함된 Scikit-learn 라이브러리를 통해서 가져 올수 있습니다.

from sklearn import datasets
iris = datasets.load_iris()

위 코드를 실행하면, Iris 데이터셋이 ‘iris’라는 변수에 저장되게 됩니다. 이후 ‘iris.data’로 데이터를, ‘iris.target’으로 타겟값(붓꽃의 품종)을 확인할 수 있습니다. pip 나 conda 명령어중 한가지 명령어를 통해 Scikit-learn을 설치할 수 있습니다.

pip 명령어 사용시

pip install scikit-learn

Conda 명령어 사용시

conda install scikit–learn

만약 설치 오류가 발생하거나 이미 ScyPi, Numpy 가 설치 되어 있다면 다음 명령어로 수행 합니다.

conda install -c conda-forge scikit-learn

참고로, Scikit-learn이 이미 설치되어 있다면, 별도로 Iris 데이터셋을 다운로드 받을 필요는 없습니다. 정상으로 설치가 되었다면 다음 소스를 통해 예제가 출력되는지 확인 해 봅니다.

from sklearn import datasets
 
# Iris 데이터셋 로드
iris = datasets.load_iris()
 
# 데이터셋에서 처음 5개의 샘플을 출력
print(“First 5 samples:”)
print(iris.data[:5])
 
# 해당 샘플들의 타겟값(붓꽃의 품종) 출력
print(“\nTarget of the samples:”)
print(iris.target[:5])

LSTM(Long Short-Term Memory) 쉽게 이해하기

LSTM(Long Short-Term Memory)은 순환 신경망(Recurrent Neural Network, RNN)의 한 종류로서, 시퀀스 데이터 (시계열 데이터, 텍스트 등)를 처리하기 위해 신경망 입니다. 이전에 배운 것들을 기억할 수 있도록 컴퓨터 의 “일기장” 을 바로 LSTM 이라고 할 수 있습니다. 즉, “일기장”을 찾아보면서 이전에 무슨 일이 있었는지 확인을 할 수 있으며 미래에 무슨 일이 일어날지 예측을 할 수 있습니다.

예를 들어, 작곡을 할 때, LSTM은 이전에 어떤 음이 나왔었는지 기억하고, 그 다음에 어떤 음이 나와야 할지 도와줍니다. 현재도 실제로 아티스트들은 이미 Ai를 통해 작곡을 하고 수 있습니다.

RNN(순환 신경망)은 이전 시점의 출력을 현재 시점의 입력에 포함시켜 정보를 순환시키는 구조를 가지고 있습니다. 하지만, 시퀀스가 길어질수록 이전 시점의 정보가 잘 전달되지 않는 ‘장기 의존성 문제’ 를 해결하기 위해 ‘셀 상태’라는 개념을 도입했습니다. 셀 상태는 LSTM 셀을 통과하는 동안 정보를 전달하는 ‘Information Highway’와 같습니다. LSTM에서는 게이트라는 구조를 통해 셀 상태에 어떤 정보를 추가하거나 제거할지 결정합니다. 이로 인해 LSTM은 긴 시퀀스에서도 이전 정보를 잘 기억하고 전달할 수 있습니다.

이 이미지는 LSTM “셀”의 내부 구조를 보여줍니다. 각각의 작은 박스는 다른 역할을 하는 “게이트”를 나타내고, 화살표는 정보가 어떻게 이동하는지를 보여줍니다. 이 중 가장 중요한 부분은 가장 위에 있는 수평선인 ‘셀 상태’입니다. 바로 “일기장”과 같은 역할을 하며 이를 통해 LSTM은 장기적인 정보를 저장하고 전달할 수 있습니다.

LSTM 활용사례

1. 자연어 처리(Natural Language Processing, NLP): LSTM은 텍스트 데이터에서 잘 작동하므로, 감성 분석, 텍스트 생성, 기계 번역 등 다양한 NLP 작업에 활용될 수 있습니다.

2. 시계열 예측(Time Series Prediction): LSTM은 시간에 따른 패턴을 학습할 수 있으므로, 주식 가격 예측, 날씨 예측 등 시계열 데이터의 예측에 사용될 수 있습니다.

3. 음성 인식(Speech Recognition): LSTM은 시간에 따라 변화하는 음성 신호를 처리하는 데 유용하므로, 음성 인식 기술에도 사용됩니다.

4. 음악 생성(Music Generation): LSTM은 시퀀스 데이터를 생성하는 데에도 사용될 수 있습니다. 이러한 특성을 이용해 음표의 시퀀스를 학습하고 새로운 음악을 생성하는 데에 사용될 수 있습니다.