딥러닝을 알아보자!
->딥러닝의 구조를 살펴보면,,

딥러닝을 자세히 알려면 기초적인 단어뜻은 알아야겠지??
입력층= 데이터를 받아들이는 층.
은닉층= 모든 입력 노드부터 입력 값을 받아 가중합을 계산하고, 이 값을 활성화함수에 적용하여 출력층에 전달하는 층.
출력층= 신경망의 최종 결괏값이 포함된 층.
가중치= 노드와 노드 간 연결 강도. 즉 입력 값이 연산 결과에 미치는 영향력을 조절하는 요소를 말함.

바이어스= 가중합에 더해 주는 상수로, 하나의 뉴런에서 활성화 함수를 거쳐 최종적으로 출력되는 값을 조절한느 역할을 함.
가중합 또는 전달 함수= 가중치와 신호의 곱을 합한 것.

활성화 함수= 신호를 입력받아 이를 적절히 어리하여 출력해 주는 함수이며, 전달 함수에서 전달받은 값을 출력할 때 일정 기준에 따라 출력 값을 변화시키는 비선형 함수.
손실 함수= 가중치 학습을 위해 출력 함수의 결과와 실제 값 간의 오차를 측정하는 함수.
시그모이드(sigmoid)

하이퍼볼릭 탄젠트(Hyperbolic tangent)

렐루(Relu)

리키 렐루(Learky Relu)

딥러닝 학습: 문제점과 해결 방안

은닉층이 많을수록 과적합, 기울기 소멸, 성능 저하 문제가 발생
과적합은 over-fitting이라 부르며 오버피팅은 훈련 데이터를 과하게 학생해서 발생한다.
일반적으로 훈련 데이터는 실제 데이터의 이룹분이며 예측값과 실제 값 차이인 오차가 감소하지만, 검증 데이터에 대해서는 오차가 증가할 수 있다.
오버피팅은 훈련 데이터에 대해 과하게 학습하여 실제 데이터에 대한 오차가 증가하는 현상을 의미한다.

이러한 과적합을 방지하기 위해서는 드롭아웃을 사용한다.
드롭 아웃은 학습 과정 중 임의로 일부 노드를 학습에서 제외시킴.

파이토치에서 드롭아웃을 구현하는 예시 코드
class DropoutModel(torch.nn.Module):
def init(self):
super(DropoutModel, self).init()
self.layer1=torch.nn.Linear(784,1200)
self.dropout1=torch.nn.Dropout(0,5)------>//50%의노드를 무작위로 선택하여 사용하지 않겠다는 의미를 뜻함.
self.layer2=torch.nn.Linear(1200,1200)
self.dropout2=torch.nn.Dropout(0,5)
self.layer3=torch.nn.Linear(1200,10)
def forward(self,x):
x=F.relu(self.layer1(X))
x=self.dropout1(X)
x=F.relu(self.layer2(X))
x=self.dropout2(X)
return self.layer3(x)
다음에 계쏙 ~