딥러닝 - 기본 개념과 학습

이현석·2024년 2월 25일

머신러닝/딥러닝

목록 보기
2/2

딥러닝 이란?

출처:https://neocarus.tistory.com/entry/딥러닝의-필요성

딥러닝은 인공지능의 하위 개념으로 "인공신경망"에서 발전한 형태이다. 뇌의 뉴런(신경) 활동과 동일한 구조이며 알고리즘을 신경망과 유사하게 처리한다고 하여 "인공신경망" 처리 방법이라고 한다.

🎈 Summary
선형회귀와 논리회귀는 모두 1차 함수를 사용하지만 실제 자연계에는 직선으로 설명할 수 없는 문제가 많다. 이런 복잡한 문제들을 풀기 위해 선형회귀를 여러번 반복해도 비선형이 되는 것은 아니다.

그래서 선형회귀 사이에 비선형의 무언가를 넣어야 했고 이렇게 층(Layer)을 여러개 쌓은 모델은 잘 동작하여 층을 깊게(Deep) 쌓는다고 해서 딥러닝이라고 불리게 되었다.
  • 딥러닝의 다른 단어 표현
  1. 딥러닝(Deep learning)
  2. Deep neural networks
  3. Multilayer Perceptron(MLP)

딥러닝의 역사

  • XOR 문제

기존 머신러닝은 AND, OR 문제로부터 시작한다.

OR

x1x2y
000
011
101
111

AND

x1x2y
000
010
100
111

AND, OR 문제를 풀기위해서는 선형의 공식(논리회귀)으로 해결이 가능하다.

y=w0+w1x1+w2x2y=w_0+w_1x_1+w_2x_2

출처:https://datascientest.com/en/perceptron-definition-and-use-cases

이러한 수식을 아래와 같이 표현할 수 있으며 Perceptron이라고 부른다.
(초기 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘)


x1x2y
000
011
101
110

하지만 문제는 XOR문제를 선형의 공식으로 해결이 불가능하기 때문에 Multilayer Perceptrons(MLP)라는 개념을 도입하여 문제를 풀어보려고 하였다.

출처:https://www.allaboutcircuits.com/technical-articles/how-to-train-a-multilayer-perceptron-neural-network/

Layer를 중첩시킨 MLP로 XOR 문제를 풀기 위해 도전했지만 MLP의 weight과 bias를 학습시키는데 너무 많은 계산이 필요하므로 머신러닝/딥러닝의 태동기였던 1950년대~1970년대의 기술로는 불가능하여 딥러닝(=MLP, Neural networks)의 발전은 짦게는 10년, 길게는 20년 정도 후퇴하게 된다.

Backpropagation (역전파)

  • 딥러닝의 발전을 가져온 아이디어인 역전파는 1974년 Paul Werbos라는 사람의 박사 논문으로 시작 된다.

출처:https://developer.nvidia.com/blog/inference-next-step-gpu-accelerated-deep-learning/

  1. W(weight)와 b(bias)를 이용해서 주어진 입력을 가지고 출력을 만들어 낼 수 있다.
  2. 그런데 MLP가 만들어낸 출력이 정답값과 다를 경우 W와 b를 조절해야 한다.
  3. 그것을 조절하는 가장 좋은 방법은 출력해서 Error(오차)를 발견하여 뒤에서 앞으로 점차 조절하는 방법이 필요하다.

이 알고리즘은 초기에 관심을 받지 못하였으나 한 교수에 의하여 XOR 문제를 해결할 수 있는 방법이 알려지기 시작 하였다.

출처:https://www.youtube.com/watch?v=kNPGXgzxoHw

Deep Neural Networks 구성 방법

  • 딥러닝 네트워크 구조는 크게 3가지로 나누어 진다.
    • Input Layer(입력층) : 네트워크의 입력 부분으로 학습시키고 싶은 x 값이다.
    • Output Layer(출력층) : 네트워크의 출력 부분으로 예측한 값, 즉 y 값이다.
    • Hidden Layer(은닉층) : 입력층과 출력층을 제외한 중간층이다.

출처:https://www.allaboutcircuits.com/technical-articles/how-to-train-a-multilayer-perceptron-neural-network/

수많은 뉴런들은 서로 빠짐없이 연결되어 있다. 그런데 뉴런들은 전기 신호의 크기가 특정 임계치(Threshold)를 넘어야만 다음 뉴런으로 신호를 전달하도록 설계되어 있다. 연구자들은 뉴런의 신호전달 체계를 흉내내는 함수를 수학적으로 만들었는데, 전기 신호의 임계치를 넘어야 다음 뉴런이 활성화 한다고 해서 활성화 함수라고 부른다

활성화 함수는 비선형 함수여야 한다. 그 대표적인 예가 시그모이드 함수이고 이러한 활성화 함수를 통해서 각 층의 관계를 비선형 관계로 만들어 예측 값의 정확도를 높일 수 있따.

시그모이드 함수를 자세히 보자.
x가 -6보다 작을 때는 0에 가까운 출력 값을 보내서 비활성 상태를 만든다. 반대로 x가 6보다 클때는 1에 가까운 값을 출력으로 내보내서 활성 상태로 만든다.

이러한 활성화 함수는 여러가지 종류가 있는데 그래프를 보면 아래와 같다.

딥러닝에서 가장 많이 보편적으로 쓰이는 활성화함수는 "ReLU(렐루)"이다. 이유는 다른 활성화 함수에 비해 학습이 빠르고, 연산비용이 적고, 구현이 간단하기 때문이다.

🎈 대부분 딥러닝 모델을 설계할 때는 ReLU를 가장 많이 사용하고 여러 활성화 함수를 반복/비교하는 과정을 거쳐 최종적으로 정확도를 높이는 작업을 동반해야 한다. 이러한 과정을 모델 튜정이라고 부른다.

과적합, 과소적합(Overfitting, Underfitting)

  • 과적합 : 딥러닝 모델을 설계/튜닝 중 Training loss는 점점 낮아지는데 Validation loss가 높아지는 시점. 문제 난이도에 비해 모델의 복잡도가 클 경우 가장 많이 발생한다.
  • 과소적합 : 설계/튜닝 절차가 부족하여 Tratining loss와 Validation loss 모두 높은 시점. 문제의 난이도에 비해 모델의 복잡도가 낮을 경우 문제를 제대로 풀지 못하는 현상이다.

따라서 문제의 복잡도를 파악하고 알맞는 튜닝 과정을 거쳐 최적합(Best fie)의 모델을 찾아야 한다.

XOR실습

https://colab.research.google.com/drive/1OBHswBbXbUdfv7cj82kmuDjqt1lwDCZ4#scrollTo=nDHt2P5DaIMF

수화 알파벳 실습

수화 알파벳을 표현한 이미지를 통한 모델 학습

https://colab.research.google.com/drive/12BqcP-_QnDBEgrhEa7Pyo0-bD9X2QCgp

🎈 지금까지 딥러닝/머신러닝의 발전 사례와 역사를 확인해보았고, 현재 사용 중인 다양한 신경망 구조와 머신러닝의 학습 방법인 전이 학습을 살펴 보자

합성곱 신경망 (Convolutional Neural Networks)

여러 신경망 구조 중 현재 이미지처리에 많이 쓰이는 신경망구조로 계산 방식은 입력데이터와 필터의 각각의 요소를 서로 곱한 후 다 더라면 출력 값이 된다.

출처:https://ce-notepad.tistory.com/14

이러한 합성곱 계산은 인공지능 4대 석학 중 한명인 얀 르쿤 교수에 의해 이미지 처리에서 엄청난 성능을 보이는 것을 증명 하였다. CNN 활용 방법으로 딥러닝은 전성기를 이루었고 얼굴 인식, 사물 인식 등에 널리 사용되며 현재도 이미지 처리에서 가장 보편적으로 사용되는 네트워크 구조 이다.

🎈 합성곱 계층 (Convolution layer)

  • Filter, Strides, Padding
    5X5 크기의 입력이 주어졌을 때, 3X3 필터를 사용하여 합성곱을 하면 3X3 크기의 특성맵을 출력할 수 있다. 필터(Filter)를 한 칸씩 이동하며 합성곱 연산을 하며 이동하는 간격을 스트라이드(Strides)라고 한다. 그런데 이런 연산 방식의 특성상 출력 값인 특성 맵의 크기가 줄어드는데 이런 현상을 방지하기 위해 패딩(Padding)을 주어, 스트라이드가 1일 때 입력값과 특성 맵의 크기를 같게 만들 수 있다.

[출처:https://tensorflow.blog/a-guide-to-convolution-arithmetic-for-deep-learning/)

  • 위에서는 1개의 필터를 사용하여 연산을 하였지만 여러개의 필터를 이용하여 합성곱 신경망의 성능을 높일 수 있다. 이미지는 3차원(가로, 세로, 채널)이므로 아래와 같은 모양으로 입력과 출력이 나타난다.

[출처:https://stackoverflow.com/questions/42883547/intuitive-understanding-of-1d-2d-and-3d-convolutions-in-convolutional-neural-n)

CNN의 구성

합성곱 신경망은 합성곱 계층(Convolution layer)과 완전연결 계층(Dense layer)을 함께 사용한다.

[출처:https://teknoloji.org/cnn-convolutional-neural-networks-nedir/)

합성곱 계층 + 활성화 함수 + 풀링을 반복하면서 점점 작아지지만 핵심적인 특성들을 뽑아 낸다. 여기서 풀링 계층(Pooling layer)은 특성 맵의 중요부분을 추출하여 저장하는 역할을 한다.

아래 이미지는 Max pooling의 예시이다. 2X2 크기의 풀 사이즈(Pool size)로 스트라이드 2의 Max Pooling 계층을 통과할 경우 2X2 크기의 특성 맵에서 가장 큰 값들을 추출 한다.

또한 Average Pooling은 대상 영역에서 평균 값을 계산하는데 위의 이미지 왼쪽 상단의 경우 (1+2+0+1)/4 = 1 이 된다.

[출처:https://teknoloji.org/cnn-convolutional-neural-networks-nedir/)

다시 이 그림으로 돌아와 두 번째 풀링 계층을 지나면 오나전연결 계층과 연결과어야 하며 풀링을 통과한 특성 맵은 2차원이고 완전연결 계층은 1차원이므로 연산이 불가능하다.

따라서 평탄화 계층(Flatten layer)를 사용해서 2차원을 1차원으로 펼치는 작업을 하게 된다.

[출처:https://undeadkwandoll.tistory.com/31)

평탄화 계층을 통과하게 되면 완전연결 계층에서 행렬 곱셈을 할 수 있게되고 마찬가지로 완전연결 계층(=Dense=Fully connected) + 활성화 함수의 반복을 통해 점점 노드의 개수를 축소시키다가 마지막에 Softmax 활성화 함수를 통과하고 출력층으로 결과를 출력하게 된다.

#네트워크 구성
input = Input(shape=(784,))  #784 pixel
hidden = Dense(1024, activation='relu')(input) #노드가 1024개로 구성된 은닉층 생성+다음 층으로 값을 전달 할때 사용할 활성화 함수
hidden = Dense(512, activation='relu')(hidden)
hidden = Dense(256, activation='relu')(hidden)
output = Dense(24, activation='softmax')(hidden)

model = Model(inputs=input, outputs=output)

model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.001), metrics=['acc'])

model.summary()

CNN 활용 사례

  • 물체 인식(Object Detection)
  • 이미지 분할(Segmentation) - Segmentation은 각각의 오브젝트에 속한 픽셀들을 분리하는 것을 나타낸다
    • 인물과 배경을 Segmentation하여 배경은 흐릿하게 처리해서 인물을 Focus하는 기술
    • 의료영상에서 양성/음성부분을 파악하고 악성인 부분을 Segmentation하여 인식
  • 자율주행 물체인식
  • 자세 인식(Pose Detection) - 사람을 인식하고 인체의 각 부분의 위치를 파악한다. (Ex: 저스트 댄스)
  • 화질개선(Super Resolution)
  • Style Transfer - 한 이미지를 다양한 화풍으로 변경
  • 사진 색 복원(Colorization)

전이 학습 (Transfer Learning)

전이 학습은 한 작업에 대해 이미 사전 학습된 모델을 새로운 작업에 맞게 조정하여 다른 모델에 적용 하는 것을 말한다. 즉 이미 지식이 축적된 모델을 다른 문제에 이용하는 것으로 볼 수 있다.

[출처:https://velog.velcdn.com/images/milgun/post/23e5af23-f379-432c-980d-f1529624ae7a/image.png)

전이 학습을 사용하는 이유

  1. 이미 학습된 모델(Pre-Traind Model)을 사용해서 문제를 쉽고 빠르게 해결할 수 있다.
    • 이미 입력된 데이터의 feature를 효율적으로 추출하기 때문에, 별도로 진행 할 필요가 없다.
  2. 작은 데이터셋에 대해 학습을 진행 할 때 Overfitting을 예방 할 수 있다.
    • 적은 데이터로 특징을 추출하기 위한 학습을 하게 되면, 데이터 수에 비해 모델의 가중치 수가 많을 수 있어 미세한 특징까지 모두 학습할 수 있다. 전이 학습을 이용해 마지막 레이어만 학습하게 한다면 학습할 가중치 수가 줄어 과한 학습이 이루어지지 않게 할 수 있다.

재미있는 사실은 다른 형태의 데이터셋에 대해서도 효과를 볼 수 있다는 것인데, 이를 테면 1000개의 동물/사물을 분류하는 ImageNet 대회에서 학습한 모델을 이용해 얼굴 인식 데이터셋에 학습시켜도 좋은 결과를 얻을 수 있었으며 현재도 많이 사용하는 기술 이다.

순환 신경망 (Recurent Neural Networks)

RNN은 은닉층이 순차적으로 연결되어 순환구조를 이루는 인경 신경망의 한 유형이다. 이 딥러닝 알고리즘은 언어 변환, 자연어 처리(nlp), 음성 인식, 이미지 캡션과 같은 순서 문제나 시간 문제에 흔히 사용 된다. Siri, 음성 검색, Google/Naver 번역과 같이 널리 쓰이는 애플리케이션에도 통합되어 사용 하고 있다.

[출처:https://velog.velcdn.com/images/milgun/post/03d4f2b4-f11a-44a3-ac0c-d45d27c9113b/image.png)

기본 구조는 위 그림처럼 뉴런의 출력이 다시 자기 자신으로 전달 된다는 것이고 확장을 통해 입력/출력 길이에 관계가 없기 때문에 필요에 따라 다양하고 유연하게 구조를 만들 수 있다.

[출처:https://smartstuartkim.wordpress.com/2019/03/23/recurrent-neural-network-%EC%88%9C%ED%99%98-%EC%8B%A0%EA%B2%BD%EB%A7%9D/)

이 알고리즘을 통해 연속적인 story가 있는 소설을 만드는 모델이나 시간에 따라 값을 도출 하는 주식의 시세를 예측하는 모델을 만들 수가 있다.

생성적 적대 신경망 (Generative Adversarial Network)

상호 적대적인 2가지 모델을 동시에 사용하고 경쟁적으로 학습시키는 생성 모델이다.
즉 생성자와 구분자가 서로 대립하여 서로의 성능(정확도)을 점차 개선해 나가며 학습을 하는 것이 주요 개념이다.

[출처:https://velog.velcdn.com/images/milgun/post/71867ef3-a377-4682-ac87-11b46de79b34/image.jpg)

가짜 이미지를 만드는 생성자와 이미지의 진위 여부를 판단하는 구분자가 있고 생성자는 0과 1사이의 값(0은 가짜, 1은 진짜)을 생성하고 가짜를 진짜인 1처럼 만들기 위해 Target인 1과 예측의 차이인 손실을 줄이는 역전파(Backpropagation)을 이용한 weight을 조정 한다.

구분자는 진짜 이미지는 1로, 가짜 이미지는 0으로 판별할 수 있는 기준을 가지고 생성된 모델에서 Real과 Fake 이미지를 학습하여 예측과 Target의 차이인 손실을 줄여야 한다.

두 모델이 대립하면서 발전해 에폭(Epoch)이 지날 때마다 생성된 이미지가 정교하게 만들어 지는 것을 볼 수 있다.

하지만 두 가지 모델을 동시에 경쟁적으로 학습이 안정적이지는 않고, 대규모 데이터셋으로 학습시키기 힘들다는 단점이 존재한다. 이 때문에 자연어 처리(Text to Image)에서는 효과를 보진 못하지만 상대적으로 규모자 작은 데이터셋에서는 좋은 성능을 발휘하여 수십 번의 연산 처리가 필요한 모델에 비해 GAN은 적은 연산만으로 데이터 생성이 가능하므로 효율면에서 유리하여 많이 사용하고 있는 모델이다.

GAN 실습

실제 이미지를 만화처럼 변경해보기

https://colab.research.google.com/drive/1mjfY6ZmMveqAGWoMLZBqjfwMxtfKOyB3

CNN 실습

수화 MNIST CNN

https://colab.research.google.com/drive/1aGR11ms-UwwcOpl4UYkltnjswighhVAr#scrollTo=4MWMAHCdM2BO

전이학습 실습

과일 이미지를 학습하여 과일 종류를 예측

https://colab.research.google.com/drive/1aGR11ms-UwwcOpl4UYkltnjswighhVAr#scrollTo=4MWMAHCdM2BO

소회

"All Together, All On"

이번 CES 2024의 메인 슬로건이다.

세부 키워드는 모빌리티, 헬스케어, 푸드테크로 요약 할 수 있으나 핵심은 전 산업의 AI와의 융합을 강조 했다.

세상에는 다양한 기술이 있고, 그 기술을 습득하고 활용하기 좋은 세상을 넘어 특정 기술에 대한 이해도 없이 완성도 높게 구현이 가능한 세상이 도래하고 있다.

이러한 사실 때문에 다가올 변화에 대한 적응과 무력감에 쌓인 적이 있으나 앞으로 더욱 더 인간적인 능력이 중요해지고 이러한 발전을 예의주시하고 적응하는 노력이 필요한지 생각해 본다.

  1. AI 발전 : 인공지능 기술은 계속해서 발전하고 있고, 점점 더 우리 생활에 더 많은 영향을 미칠 것이다. 그렇기 때문에 AI가 어떻게 발전하고 우리의 일상에 어떤 영향을 미칠지를 주의 깊게 살펴 봐야 한다.
  2. 일자리 변화 : AI와 자동화 기술의 발전은 일자리 구조의 큰 변화를 일으킬 것으로 예상된다. 일부 전통적인 작업은 자동화 되고, 반면 새로운 직업이 생길 것이다. 이런 변화에 대비하여 지속적인 교육과 습득이 필요한 것이다.
  3. 데이터 프라이버시와 보안 : AI는 많은 양의 데이터를 필요로 한다. 이는 개인의 프라이버시와 보안 문제를 야기 할 것이다. 우리는 우리의 데이터가 어떻게 수집되고 사용되는지에 대해 주의를 기울여야 한다.
  4. 알고리즘 편향과 공정성 : 앞서 학습한 데로 딥러닝/머신러닝에서 중요한 것은 전처리이다. 무수히 많은 데이터를 분류하고 분석하기 원하는 결과 값을 도출 하려면 Parameter와 데이터의 사전 정의가 중요하다. 이에 따라 AI는 편향 될 수 있고 공정하지 않은 결과를 초래할 수 있다. 우리는 이런 편향을 감지하고 공정한 알고리즘을 가진 AI가 개발되도록 노력 해야 한다.
  5. 결국 인간 : AI는 인간의 도구로 사용되어야 하며, 인간의 지식과 노력을 보완하는 역할을 해야 한다. 그에 따라 AI 기능과 협력을 통해 새로운 가능성을 항상 탐구해야 할 것이다.

이것이 내가 생각하는 AI와 미래에 대한 생각이다.

마지막으로 작년과 동일하게 마무리한다..
"코딩 뿐만이 아니라 이제는 설계와 테스트까지 해주는 시대로 가고 있는 지금 SystemIC 소속으로서, IT 개발자로서의 방향성 확립이 굉장히 중요하다고 생각 한다. (새로운 기술에 대한 적응과 Communication 능력 / 기획능력) 나아가 우리는 어떻게 잘 먹고, 잘 살것인지 선택과 집중이 필요하다.




참고자료

https://tensorflow.blog/a-guide-to-convolution-arithmetic-for-deep-learning/

https://velog.io/@jjaa9292/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A53.-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

profile
溫故知新

0개의 댓글