

사람의 신경 시스템(Neuron System)

뉴런이라는 신경세포(중학교때였나....) 여러가지가 연결된 신경시스템

이미지넷을 통한 첼린지를 통하여 AlexNet이 나오고 많은 발전이 이루어짐


사진의 이마와 턱을 기준으로 눈코입을 확인하고 숫자의 경우 예를들어 9를 확인할때는 네모안
의 오른쪽 | 짝대기를 확인후 위에 동그라미가 달려있는지 확인한다
패턴을 파악하고 예측을 하는 방식

딥러닝의 가장 기초적인 단위 -> 퍼셉트론
![]() | ![]() |
Inputs 과 outputs으로 사람의 신경세포와 비슷하게 만들어짐
bias = 입력된 값과 상관없이 입력되어지는 값
-> 모두 더한다

1보다 크면 무조건 1 0보다 작으면 무조건 0
퍼셉트론 동작 예시

ex. 1 , -2 -0.5 -> y = activation(-0.5+12+-2-1) = -0.5 -> 값은 = 0



w0 = 의지 w1 = 신작드라마 영향력 w2 = 여가시간에 따른 학습
시각화

점들은 각각의 데이터 대각선을 잘 구해야함 -> 그래야 구분을 잘할 수 있음
퍼셉트론은 선형 분류기로써 데이터 분류 가능함

선형 분류기란 선을 통해서 분류하게 됨
퍼셉트론의 단점

데이터가 하나의 선만으로 구분불가능할 경우 완벽한 분류를 못함
비 선형적인 문제 해결



히든층이 많아진다면, 깊은 신경망이라는 의미의 Deep Learning이라는 단어 사용.장점 : 분류할수 있는것이 많아져 성능이 상승
단점 : 가중치가 상당히 많아짐


예측값과 실제값 간의 오차값을 최소화하기 위해 오차값을 최소화하는 모델의 인자를 찾는 알고리즘 적용
Loss function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘을 적용
딥러닝 모델이 예측값 구하는 방식

ex.
bios = 0 이라는 가정
활성화 함수는 다양한 것이 존재 sigmoid , step , tangent , relv 등.(딥러닝 특징에 따라 달라짐)
순전파를 사용하면 예측값과 실제값 간의 오차값을 구하여 Loss function을 구할 수 있지만
최적화를 하는 방식은? -> 경사 하강법(Gradient descent)을 사용
경사 하강법(Gradient descent)
가중치를 Loss function값이 작아지게 업데이트 하는 방법
가중치는 Gradient값을 사용하여 업데이트를 수행함
Gradient값은 각 가중치 마다 정해지며,역전파(Backpropogation)를 통하여 구할 수 있음.
역전파

output 에서부터 시작

딥러닝 모델의 학습 순서
유연하고,효율적이며,확장성 있는 딥러닝 프레임워크
대형 클러스터 컴퓨터부터 스마트폰까지 다양한 디바이스에서 동작 가능
Trnsorflow딥러닝 모델은 Tensor 형태의 데이터를 입력 받는다.
Tensor란 다차원 배열로서 tensorflow에서 사용하는 객체

1차원배열 vector 2차원배열 matrix 3차원배열이상 Tensor
tf.data.Dataset
# 데이터 불러오기
df = pd.read_csv('data.csv')
feature = df.drop(columns=['label'])
label = df['label']
# tensor 형태로 데이터 변환
dataset = tf.data.Dataset.from_tensor_slices((feature.values, lavel.values))
# .values = 배열로 작업
Epoch 와 Batch

batch -> 딥러닝이 학습하는 동안 가중치 업데이트 양이 많아짐 -> 전체의 데이터를 쪼개서 사용
Ex.

총 데이터가 1000개,Batch size = 100 일시
- 1 iteration = 100개 데이터에 대해서 학습
- 1 epoch = 1000/Batch size = 10 iteration
# tensor형태로 데이터 변환
dataset = tf.data.Dataset.from_tensor_slices((feature.values, lavel.values))
# dataset의 batch 사이즈를 32로 결정 ex. 320개 있을때 10개로 batch가 생김
dataset = dataset.batch(32)
텐서플로우의 패키지로 제공되는 고수준 API
딥러닝 모델을 간단하고 빠르게 구현 가능
tf.keras.models.Sequential()
tf.keras.layers.Dense(units, activation)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10,input_dim=2,activation='sigmoid'), # 2개의 입력 변수,10개의 노드
tf.keras.layers.Dense(10,activation='sigmoid'),# 10개의 노드
tf.keras.layers.Dense(1,activation='sigmoid'),# 1개의 노드
])
입력이 2개고 출력이1개! 히든층은 2개!
모델에 Layer 추가하기
[model].add(tf.keras.layers.Dense(units,activation))
Ex.
model = tf.kears.models.Sequential()
model.add(tf.keras.layers.Dense(10,input_dim=2,activation='sigmoid'))
model.add(tf.keras.layers.Dense(10,activation='sigmoid'))
model.add(tf.keras.layers.Dense(1,activation='sigmoid'))

dataset -> x,y에 넣어줘도 됨
ex.
model.compile(loss='mean_squared_error',optimizer='GSD')
# MSE를 loss로 설정,촤적화 방식은 SGD사용
model.fit(dataset,epochs=100)
# dataset에 저장된 데이터를 입력하고,epochs를 100으로 설정하고 학습

ex.
model.compile(loss='mean_squared_error',optimizer='GSD')
# MSE를 loss로 설정,촤적화 방식은 SGD사용
model.fit(dataset,epochs=100)
# dataset에 저장된 데이터를 입력하고,epochs를 100으로 설정하고 학습
---
model.evaluate(X.test,Y_test)
predicted_labels_test = model.predict(X_test)

ex.
| 1번 | 2번 |
|---|---|
![]() | ![]() |
1번과 같은 이미지가 있다고 할 때 어떤 동물인지 분류하고자 함.
2번사진의 이미지는 각 픽셀 값을 가진 숫자 배열로 인식!
모두 같은 크기를 갖는 이미지로 통일하여 만듬

MNIST데이터 -> 사람의 손글씨를 이미지로 보여지는 데이터

극도로 많은 수의 파라미터가 필요 만약에 이미지에 변화가 있다면?

합성곱(CNN) 신경망의 구조


필터를 통해서 전체적으로 비교하여 점수를 내고 점수에 대하여 피쳐맵을통해 보여짐
피쳐맵의 크기 변형 : Padding,Striding

필터를 원본사이즈와 같게 만드는 방법
Pooling Layer

Fully Connected Layer

CNN[] -> 키필터 [] 입필터[] 정리된것을 1차원배열로 [] 다들어감
각각의 정리된 것들에 위치하여 각자의 배열에 맞게 들어감
분류를 위한 Softmax활성화 함수

마지막 계층에 Softmax 활성화 함수 사용
a+b+c+d+e+f = 1,a,b,c,d,e,f >=0
각각이 확률별로 나옴 ( ex. a,b,c,d,e,f중 확률값이 가장 높은것이 입력값의 결과물이됨)

합성곱 -> 특징 , 풀링 -> 사이즈,노이즈 , 활성함수 -> 분류
합성곱 신경망 기반 다양한 이미지 처리 기술




문장 자체를 수치변환하여 인식


수치형으로 변화하기 위한 과정



자연어 문장을 기존 MLP모델에 적용시키기에는 한계가 있음 토근간의 순서와 관계를 적용할 수 있는 모델은? RNN(Recurrent Neural Network)모델

기존 퍼셉트론 계산과 비슷하게 X입력 데이터를 받아 Y를 출력
순환 신경망의 입출력 구조

ex .

인베이딩 백터값이 각각 들어감 예를들어 수업이 백터값이 다음으로 넘어가 수업이 , 이 가 들어가고 옆으로 쭉쭉 들어감

전처리 -> 임베딩(특징) -> RNN(기억하게하는 딥러닝) -> 활성함수
