유진의 코딩스토리
Python DL 실습 1 [퍼셉트론, 신경망] 본문
Compute Instance 생성
Azure ML에 실습과제 업로드
퍼셉트론
인간의 뉴런은 감각을 통해 얻은 신호를 취합하여 특정 값 이상이면 다음 뉴런으로 신호를 전달한다.
퍼셉트론은 이러한 인간의 뉴런을 모방하여 수학적으로 모델링 한 것으로 입력값과 가중치의 선형 결합으로 되어있다.
위 퍼셉트론은 선형결합의 결과값과 임계값에 따라 출력값의 신호 전달 여부를 정하는 모델이다.(분류문제를 해결한다.)
AND Gate
두 입력이 모두 1일 때만 1 출력, 나머지는 0 츨력
OR Gate
두 입력 중 하나라도 1일 때 1 출력, 나머지 0 출력
NAND gate
AND gate와 정 반대의 결과 출력
XOR Gate
둘 중 하나만 1인 경우 1 출력, 나머지 0 출력
XOR에 대해 선형분류가 불가능함.
두개의 직선을 사용해야만 분류 가능
AND, NOT, OR gate 연산자들의 조합으로 XOR 퍼셉트론 문제를 해결 할 수 있음.
신경망
활성화함수
입력값을 일정 기준에 따라 변화시켜 출력하는 비선형 함수
입력값과 가중치를 곱하여 bias를 더한 후 활성화 함수를 적용한다.
활성화 함수는 특정 임계값을 만족함면 해당 값을 출력하는 형식이다.
활성화 함수를 사용하는 이유
▶ 비선형성 추가 : 복잡한 데이터 패턴 학습
▶ 출력 범위 제한 : 다음 층 입력값의 범위 제한
▶ Gradient 계산의 용이성 : 역전파로 가중치 조정시 활성화 함수의 도함수 필요
▶ 계산의 효율성 :
활성화 함수에는 다양한 함수가 있다.
Step function
Sigmoid function
Relu function
궁극적으로 relu함수를 많이 쓰는데 sigmoid 함수같은 경우 역전파 시 Gradient Vanishing 문제 가 발생한다.
Sigmoid 함수는 출력이 0과 1 사이의 범위를 가지며, 입력이 클수록 기울기가 매우 작아집니다. 이는 역전파 과정에서 기울기가 점점 작아져 가중치가 거의 업데이트되지 않는 기울기 소실 문제가 발생한다. 특히 신경망의 깊이가 깊어질수록 학습이 제대로 이루어지지 않을 수 있다.
다차원 배열의 계산 : 행렬
numpy 라이브러리를 활용하여 행렬을 계산해보자.
행렬의 곱셈
다층 퍼셉트론 : MLP(Multi Layer Perceptron)
가장 기본 형태의 심층 신경망으로 여러개의 은닉층을 통해 복잡한 비선형 문제를 해결할 수 있는 인공 신경망의 기초 모델이다.
• 입력층(Input layer) : input 데이터
• 은닉층(Hidden layer) : 여러 퍼셉트론의 조합 (비선형 활성화 함수 사용), 입력 데이터를 가중치와 함께 처리하고 활성화 함수에 의해 출력을 결정하는 층으로 1개 이상의 은닉층을 가질 수 있음(층이 많아질수록 신경망의 깊이가 깊어진다.)
• 출력층(Output layer) : 모델의 최종 결과값, 분류문제에서는 각 class에 해당하는 노드들이 존재하며 회귀 문제에서는 하나의 노드에서 연속적인 값이 출력된다.
입력층에서 1층으로 신호 전달
- os : 운영체제와 상호작용하기 위한 파이썬 기본 모듈, 파일과 디렉토리 경로 처리 등에 사용된다.
- sys : 파이썬 인터프리터와 관련된 모듈
1층에서 2층으로 신호 전달
2층에서 3층으로 신호 전달
마지막에는 softmax함수로 변환한다.
0번째 노드가 37%의 확률을 지니고 1번째 노드는 63%의 확률을 지니므로 두번째 원소가 정답일 확률이 가장 높다.
손글씨 숫자 인식
숫자 인식을 위한 MNIST 데이터 셋
- MNIST 데이터셋은 0부터 9까지의 손글씨 이미지로 구성
- 훈련 데이터가 6만장, 테스트 데이터가 1만장
- 각 데이터는 이미지와 라벨로 이루어짐
- 각 이미지는 28×28 해상도의 흑백 사진
- 각 픽셀은 0에서 255로 밝기 표현
Image matrix
이미지를 수치화하면 28 * 28 행렬로 0 ~ 255로 각 픽셀의 밝기를 표현하도록 구성된다.(밝을수록 255에 가까운 값을 가진다.)
하지만 이를 신경망에 입력으로 넣기 위해 평탄화(flatten)를 진행하여 총 784개의 노드에 입력으로 넣는다.
hidden layer를 추가해서 입력값에 가중치를 곱해 출력값을 계산하고 활성화 함수(sigmoid)적용한 후 다시 가중치를 곱해 계산한 후 활성화함수(softmax) 적용하여 결과를 출력한다.
출력결과 노드는 확률값으로 구현되어있는데 이는 해당 숫자 이미지가 어떤 숫자 값으로 인식되는지를 확률로 표현한 것으로 사진에서 보다시피 9 노드의 확률값이 가장 높아 숫자 인식에 성공한 것을 알 수 있다.
'Azure 실습 > Azure deep learnig' 카테고리의 다른 글
OpenCV 실습 (0) | 2024.10.29 |
---|---|
Python DL 실습 5 [합성곱 신경망] (0) | 2024.10.25 |
Python DL 실습 4 [학습 관련 기술] (0) | 2024.10.25 |
Python DL 실습 3 [오차역전파] (0) | 2024.10.24 |
Python DL 실습 2 [신경망학습] (0) | 2024.10.23 |