티스토리 뷰

MNIST는 머신러닝 계의 printf("hello world") 라고도 할 수 있습니다.

 

 

 

MNIST 데이터셋은 0부터 9까지의 손글씨 이미지로 구성되어 있습니다.

 

머신러닝은 데이터를 훈련 데이터, 테스트 데이터로 나눕니다. 또는 세가지 훈련 데이터, 테스트 데이터, 벨류 데이터로 나누기도 합니다.

 

 

머신러닝에는 훈련 데이터와 테스트 데이터를 절대 섞지 않는다 라는 원칙이 있습니다.

 

이게 섞이면 신뢰도에 문제가 생기기 때문입니다.

 

 

 

각 데이터는 이미지와 라벨로 이루어져 있습니다. ( 이미지는 손글씨 사진, 라벨은 그 숫자가 무엇인지 적혀있는 곳 )

 

각 이미지는 28*28 해상도의 흑백 사진 입니다.

 

각 픽셀은 0에서 255로 밝기를 표현합니다.

 

 

우리는 인공신경망에 이 훈련데이터를 넣어서 학습을 시킵니다.

 

그 후 테스트 데이터를 통해 어느정도의 정확도를 가지고 있는지 판단합니다.

 

 

 

다양한 필체의 숫자들을 프로그래밍이 맞춘다는 것은 굉장히 어려운 일입니다.

 

 

사람에 따라 다른 필체

이런식으로 사람에 따라 같은 숫자를 다양한 규칙을 통해서 쓰기 때문입니다.

 

너무 변형이 많기 때문에 사람이 직접 규칙을 다 정할 순 없다. 그래서 우리는 머신러닝을 통해 스스로 기계학습 시켜 사용하는 방법을 택한 것입니다.

 

 

 

컴퓨터는 위 사진을 보면 알 수 있듯이 사진을 데이터로서 분석합니다. 

 

위 사진을 보면 조금 더 직관적으로 이해가 될 것입니다. 오른쪽의 데이터는 왼족의 사진파일을 28*28 픽셀들을 밝기로 구분한 컴퓨터가 보는 세상입니다.

 

 

 

우리는 이 행렬 데이터를 인공신경망에 입려할 수 있게 벡터로 바꾸어줍니다.

 

 

위 숫자 5의 이미지 데이터를 벡터로 바꾸었습니다. ( 너무 길어서 다음줄로 넘어간 것이지 한 줄의 데이터입니다. )

 

 

출처 https://ml4a.github.io/ml4a/neural_networks/

 

768개의 픽셀을 인공신경망에 입력합니다.

 

 

마지막 softmax 에서, 10차원의 확률벡터가 결과값으로 나옵니다. 

 

여기있는 확률벡터로 9다 라고 바로 이야기하는 것이 아닌 9일 확률이 높다 이렇게 나옵니다. (4일 확률과 7일 확률도 존재하는것을 볼 수 있습니다)

 

 

이번 9는 뉴럴 네트워크가 5라고 인식을 하였습니다.

 

 

뉴럴 네트워크는 Weights(가중치)와 biases(b=편향)의 값을 얼마나 정교하게 잘 찾았냐에 따라 성능이 달라집니다.

 

ml4a.github.io/demos/forward_pass_mnist/

 

MNIST forward pass

 

ml4a.github.io

 

 

여기에 들어가시면 위 사진들말고도 몇가지 테스트케이스를 가지고 결과가 어떻게 나왔는지 볼 수 있습니다.

 

 

 

 

2000년 초반만해도 인공지능 전문가들이 개와 고양이를 구분하는것이 불가능 할 것이라고 예측했다고합니다.

 

 

하지만 현재에는 개와 고양이의 품종까지도 맞출 정도로 정교해졌다고 합니다. 또한 다양한 사물을 구분할 수 있는 YOLO 객체인식 같은 오픈소스도 많이 나와있는것을 보면 기술발전이 얼마나 빠른지 알 수 있는 것 같습니다.

 

 

 

Vector = 1차원

Matrix = 2차원

Tensor = 3차원

 

이미지 데이터는 3차원 텐서입니다.

 

컬러 이미지 : 3차원 텐서

 

컬러 이미지들의 데이터는 4차원 텐서입니다. (RGB 즉 세개의 색을 조합하여 색을 만들기때문에 빨간 사진, 녹색 사진, 파란 사진 세개의 사진 데이터가 겹쳐져서 만들어져 있습니다. 이로인해 층이 생기기때문에 한 차원의 높이데이터가 한개 더 추가됩니다.)

 

4차원 텐서는 우리가 시각적으로 이해할 수 없기 때문에 그냥 3차원 텐서를 1차원처럼 쌓아둔걸로 표현을 한 것 같습니다.

 

그 후도 마찬가지 입니다.

 

출처 : rekt77.tistory.com/102

 

60,000*28*28*(1)

 

10,000*3*1920*1080

 

 

 

책에 나온 소스에는 기본적으로 컬러사진을 사용한다는 가정으로 데이터를 N(사진 장 수 ) *C(컬러)*H(세로)*W(가로) 4차원텐서를 입력합니다.  코드 입력부분 중 C부분에 1을 넣어주면 흑백사진을 학습시킬 수 있습니다. (컬러는 여러장이지만 흑백은 한장이므로) 

 

이전게시물,

2020/09/17 - [Study/인공지능] - 확률 벡터 (Softmax 변환) overflow 대책 증명 ( 인공지능 기초 #5-2)

2020/09/16 - [Study/인공지능] - 3층 인공신경망 ( 퍼셉트론과 활성화 함수의 결합 ) ( 인공지능 기초 #5-1)

2020/09/15 - [Study/인공지능] - Heaviside 함수 Sigmoid함수 ReLU 함수, 신경망과 활성화 함수 ( 인공지능 기초 #4 )

2020/09/14 - [Study/인공지능] - 다층 퍼셉트론 XOR 논리회로 표현하기 , 단층으로 안되는 이유 ( 인공지능 기초 #3 )

2020/09/13 - [Study/인공지능] - 퍼셉트론 AND, NAND, OR 논리회로 표현하기 ( 인공지능 기초 #2 )

2020/09/13 - [Study/인공지능] - 퍼셉트론, 뉴런 네트워크의 모방 ( 인공지능 기초 #1 )

댓글
최근에 올라온 글
최근에 달린 댓글
250x250