이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[ML] Deep Neural Networks

  • 2025.12.06 19:40
  • Computer Science/Machine Learning
반응형

 

 

 

그냥 말 그대로 깊이가 다르다. Simple Neural Network는 Input Layer와 Output Layer 사이에 있는 Hidden Layer가 적거나 하나밖에 없는 구조고, Deep Neural Network는 Hidden Layer가 많이 배치된 구조.

 

이렇게 층이 깊어질수록 네트워크는 더 복잡한 문제를 해결할 수 있음.

 

신경망을 설계할 때 가장 중요한게 모델의 Capacity. 클 수록 더 복잡한 패턴을 학습할 수 있다.

 

Hidden Layer에 있는 Neuron의 수를 늘리면 Width가 늘어나고, Capacity도 늘어난다.

Universial Approximation Theorem에 따르면 은닉층이 하나만 있어도 Neuron이 충분히 많다면 어떤 함수든 근사할 수 있지만.. 비효율적.

 

Hidden Layer 자체의 개수를 늘리는 것도 방법이다. 이러면 Depth가 늘어나고, 단순한 표현으로도 복잡한 문제를 풀 수 있음.

 

그냥 아무 생각 없이 늘리기만 하면 Overfitting 발생하니 조심하자.
개발과 마찬가지로 적절한 Depth와 Width를 찾는게 아키텍처 설계의 핵심.

 

 

 


 

 

 

Depth 가 커지면 세 가지 문제가 발생할 수 있음.

 

Overfitting - Regularization이나 Parameter Sharing으로 해결할 수 있다.

Vanishing / Exploding Gradient - Back-Propagation 할 때 Weight 곱이 너무 작아지거나 커져서 모델 초반부 학습이 멈춘다.

Slow Optimization - 모델 규모가 커지고 데이터가 많아서 훈련 시간이 오래 걸린다.

 

Slow Optimization 문제를 해결하기 위해 여러 알고리즘이 도입됨.

 

Momentum - 원래 가던 방향으로 계속 가려는 성질을 사용해 속도를 높인다.

Adaptive Learning Rate - 파라미터를 똑같이 학습시키지 않고, 많이 변한 파라미터는 조금 학습 시키는 방식 사용

Adam - Momentum 방식과 Adaptive Learning Rate 방식을 합쳐서 사용. 가장 많이 사용된다.

 

Vanishing Gradient 문제는 Activation Function를 변경해서 해결한다.

 

우선 출력층은 정답 유형에 따라서 Sigmoid 함수를 사용할지, Softmax를 사용할지, Linear 함수를 사용할지를 결정한다.

Hidden Layer의 핵심은 ReLU. Sigmoid를 사용하면 기울기가 0으로 되면 학습이 멈춰버린다.

 

g(z) = max(0, z) 이게 ReLU 함수인데. 계산이 쉽고 양수구간에서 미분값이 1이라 Vanishing Gradient 가 발생하지 않는다.

다만 0보다 작으면 아예 죽어버리기에 Leaky ReLU를 사용하기도 함.

 

Deep Neural Network로 이미지를 다루려고 하니.. 파라미터가 너무 많고 공간 정보가 깨지는 문제가 발생한다.

그래서 Convolutional Neural Network를 사용한다. 

 

이미지 전체를 보지 않고, 작은 Filter로 이미지를 스캔하며 Feature를 뽑아낸다. 

이러면 Filter 하나를 이미지 전체에 돌려쓰니 Weight를 줄일 수 있음.

 

 

그러니까 정리하면... 학습 속도를 올리기 위해 Adam을 사용하고, 기울기 소실을 막기 위해 Hidden Layer에서 ReLU를 사용하고, 이미지 처리는 DNN 보다는 CNN을 사용한다.

 

 

 


 

 

 

Convolutional Layer

이미지의 특징을 효과적으로 추출하는 Feature Extractor 역할을 수행한다.

즉, Filter/Kernel 으로 이미지 위를 돌아다니고, 이 Filter의 값이 학습해야 할 가중치이다.

 

 

 

 

Weight Sharing - 필터 하나를 이미지의 모든 위치에 동일하게 적용. 매개변수의 개수가 대폭 감소한다.

Local Receptive Field - 필터가 작으니 한 번에 이미지의 일부만 입력으로 받음. DNN의 전체 연결 방식보다 효과적이다.

 

 

 

Pooling Layer 

Convolution Layer에서 추출된 Feature Map의 크기를 줄이고, 위치 변화에 둔감하게 만든다.

 

Pooling 영역에서 가장 큰 값 하나만 추출하고 다음 층으로 전달함.

Pooling Layer 자체에는 학습해야 할 매개변수가 없고, 단순히 영역 내 값을 선택하는 연산만 수행한다. (가장 큰 값, 평균 등..)

 

 

지금까지 원본 이미지에 Filter를 적용해 Feature Map을 생성했고,

이 Feature Map에 Pooling Layer를 적용해 더 작은 Feature Map을 생성했다.

 

이렇게 크기를 줄이는걸 Downsampling이라고 하는데.. 처리할 데이터가 줄어드니 연산 속도가 빨라지고 메모리도 줄어든다.

대충 실눈 뜨고 보는거랑 비슷함. Feature가 대충 저기에 있네 이정도로만 판단할 수 있는데, 이걸로도 충분함. 

 

 

 


 

 

 

Pooling Layer를 거친 Feature Map을 가지고 결론을 내리려면 세 가지 과정을 거쳐야 함.

 

1. Flattening

Feature Map은 2차원 행렬이다. Deep Neural Network는 1차원 벡터만 입력받을 수 있으니 형식을 맞춰줘야 함.

 

2. Fully Connected Layer

한 줄로 쭉 펴진 데이터를 가지고 추론을 시작한다. 이 부분은 DNN 과 똑같음.

Input - Hidden - Output 연결방식 생각하면 된다.

 

3. 최종 결정

FC Layer를 통과하면 숫자 값들이 나온다. 이 값을 내가 이해할 수 있는 확률로 바꾸자.

Softmax로 숫자를 0~1 사이의 확률값으로 변환하고 Classification 수행.

 

 

LeNet-5 (1998)

Conv -> Pool -> Conv -> Pool -> FC -> Output

기본적이 구조로, 정상 작동하긴 하는데 컴퓨팅 리소스 한계로 깊게 쌓을 수 없었음.

 

AlexNet (2012)

LeNet과 비슷한데 훨씬 깊고 넓다.

ReLU로 학습 속도를 높이고, Dropout으로 과적합을 방지한다.

이 때 부터 딥러닝 붐 시작..

 

VGGNet (2014)

큰 필터를 사용하는 것 보다, 작은 필터를 여러 번 겹쳐 쓰는게 Feature를 더 잘 잡는다는걸 발견.

16층, 19층까지 깊게 쌓았음. 구조가 단순하다.

 

ResNet (2015)

20층 넘게 쌓으니까 Gradient가 전달되다가 사라지는 등 성능이 떨어짐.

Shortcut을 만들어 입력데이터를 가공하지 않고 바로 다음 층에 더해주는 방식을 사용한다.

152층까지 쌓을 수 있게 됐고, 사람의 인식 능력을 넘는 최초의 모델이 됨. 

 

 

 

 


 

 

 

 

텍스트, 음성, 주식 데이터를 다룰 때는 순서가 매우 중요하다. 

 

Recurrent Neural Network (RNN) - 기존의 DNN이나 CNN은 입력이 들어오면 한 방향으로만 흐르고 끝나지만, RNN은 순환 구조를 가진다.

이전 단계에서 계산한 Hidden State를 현재 단계의 입력과 함께 사용해 출력값을 계산.

 

 

 

 

 

t값에 상관 없이 같은 가중치를 사용하는게 포인트. (Weight Sharing)

방금 처리한 결과를 다음 처리의 리소스로 활용한다. 이게 루프처럼 보여서 순환 구조라고 부른다.

 

Ensemble Method와 비슷한 느낌이지만.. 서로 다른 모델이 모이는지, 아니면 똑같은 모델 하나로 작동하는지가 포인트. 

 

다만, 문장이 길어지면 초반의 정보를 잊어버리는 문제가 있다. (Long-Term Dependencies)

RNN의 뉴런을 개조하는 Long Short-Term Memory (LSTM) 방식을 사용한다.

RNN의 Hidden State 말고도 Cell State를 만들어서 특정 단어를 기억하도록 함.

 

그런데.. LSTM에서도 문장이 너무 길어지만 모든 정보를 벡터 하나에 때려박는게 힘들어진다.

그러니 출력할 때 마다 입력 문장의 어디를 봐야 할지 정하는 방식을 도입했다. (Attention)

입력 문장의 각 단어에 대해 Attention Weights를 계산하고, 현재 시점에 필요한 정보를 요약한 벡터를 만든다.

 

현대 AI는 Transformer를 기반으로 동작한다.

RNN과 LSTM은 순서대로 하나씩 처리해야 해서 속도가 느렸지만, Transformer는 RNN 구조를 완전히 버리고 Attention으로만 모델을 구성한다.

 

Self-Attention : 문장 내에서 단어들끼리의 관계를 파악

Multi-Head Attention : 여러 Attention을 동시에 돌려 문장의 여러 Feature를 파악 

Positional Encoding : 순서대로 안 넣고 한 번에 넣으니 각 단어에 위치 정보를 더함

 

 

반응형
저작자표시 (새창열림)

'Computer Science > Machine Learning' 카테고리의 다른 글

[ML] Dimensionality Reduction  (0) 2025.12.08
[ML] Kernel Method  (0) 2025.12.07
[ML] Neural Networks  (0) 2025.12.06
[ML] Ensemble Method  (0) 2025.12.05
[ML] Decision Tree  (0) 2025.10.18

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [ML] Dimensionality Reduction

    [ML] Dimensionality Reduction

    2025.12.08
  • [ML] Kernel Method

    [ML] Kernel Method

    2025.12.07
  • [ML] Neural Networks

    [ML] Neural Networks

    2025.12.06
  • [ML] Ensemble Method

    [ML] Ensemble Method

    2025.12.05
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8)
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바