티스토리 뷰

Introduction to A.I. (2/5)

  • 인공지능을 공부할 때 알아두면 좋을 기초적인 내용을 정리한 자료입니다
    • 정확히는 딥러닝을 기반으로 하는 인공지능 에 대해서입니다
  • 추후 시간이 된다면 동영상으로도 제작해볼 생각입니다
  • 포스팅마다 50개까지의 이미지만 업로드할 수 있어, 이왕 나누는 김에 5부작으로 나누었습니다
    • (1/5) ... (5/5) 로 구분됩니다

(2/5)



  • 2장 Gradient Method 에서는 인공신경망의 가중치값을 조정하는 데에 사용되는 알고리듬에 대해 알아봅니다
  • 이번 장의 내용은 대표적인 알고리듬인 Gradient Descent 를 다룹니다
  • 이번 장부터 수학 내용이 다수 포함되기 때문에 주의깊게 읽는 것이 좋습니다


  • Gradient Method 는 선형시스템을 수치계산으로 풀어내는 방법론들을 일컫는 말입니다
    • 우리는 그 중에서도 Gradient Descent 에 집중할 것입니다
  • (곱하기 연산에 대해) 아래와 같은 상황을 가정해봅시다
    • 입력값은 무작위로 초기화되어 있습니다 (x=-2, y=3)
    • 여기에서, 원하는 출력값이 나오도록 해야합니다 ( 0 에 가까운 값)
    • 우리는 오직 입력값만을 조작할 수 있습니다


  • 입력값으로 무작위로 뽑힌 값을 넣으면 어떨까요 ?
    • 이런 개념의 해결방법을 Random Search 라고 합시다
  • 기억하세요, 누구나 항상 운이 나쁠 수 있습니다
    • 출력값이 -6 보다 커질 수는 있겠죠
    • 하지만 0 에 가까워지는 건 가능할까요 ?
    • 출력값이 너무 작거나 큰 값이 나오는 건 괜찮을까요 ?
  • 이건 반쪽짜리 해결방법인 것 같습니다
    • 다른 방법을 찾아봐야겠네요


  • 잠깐 편미분에 대해 다루고 넘어가고자 합니다
    • 이후에 배울 Numerical Gradient 를 이해하는 데에 필요하기 때문입니다
  • 편미분은 변수를 여러 개 입력받는 함수에서, 하나의 변수에 대한 미분값을 구하는 방법입니다
    • 특정 변수만 변수로 미분하고, 나머지 변수들을 상수로 미분합니다
  • 입력받는 변수 개수와 상관없이 편미분 공식은 고정된 형태를 보입니다
    • (동일한 식으로) 그저 각 변수에 대해 편미분을 합니다


  • 입력값에 대한 편미분값을 생성하고 이를 이용하는 방법입니다
    • (이러한 문제에서) 최적값을 보장하는 꽤 좋은 방법입니다
    • 하지만 연산비용이 높다는 특징이 있습니다
  • 미분을 위해 h \approx 0 이라 가정합니다
  • 편미분값을 이용해 다음 입력값을 결정하는 과정에서
    • 편미분값의 영향을 조절하기 위한 step size 를 0.1 로 설정합니다


  • 이와 같은 과정을 거치면 조금씩 0 에 근접해감을 알 수 있습니다
  • 편미분값은 사실 출력값에 대한 (입력값이 가지는) 영향력을 의미합니다
    • 예컨대, 어떤 입력 변수의 편미분값이 2.8 일 경우
    • 해당 입력 변수의 값이 1 증가할 때마다 출력값이 2.8 만큼 증가합니다
    • 반대로 해당 입력 변수의 값이 1 감소할 때마다 출력값이 2.8 만큼 감소합니다
  • 우리가 해야할 일은 단지 출력값이 0 보다 커졌을 때 이것을 멈추는 것입니다
  • step size 가 작을수록, (이 방법으로 인한 각 시행의 출력값) 차이는 줄어듭니다


  • 위에서 알아본 N.G. 은 계산량이 많다는 단점을 가집니다
    • 하지만 사실은 연산마다 동일한 계산이기 때문에 이를 반복할 필요는 없습니다
    • 즉, N.G. 의 개선된 방법이라 할 수 있습니다
  • 계산량 면에 있어 효율적입니다
    • 연산마다 편미분값을 구하는 수식을 최적화합니다
  • 예컨대, 곱하기와 더하기 연산의 경우 항상 예시와 같은 편미분값을 얻습니다


  • 이전에 사용했던 예시에 A.G. 를 적용해봅니다
  • 아까와 동일한 결과가 나오는 것을 확인할 수 있습니다
  • 이러한 효율성 때문에, AI 프레임워크들은 이러한 방법으로 최적화를 합니다


  • 일반적으로 우리는 하나의 연산만 사용하지는 않습니다
    • 즉, 서로 연결된 연산의 묶음을 사용하곤 합니다
    • 문제는 각 연산들은 자신 이외의 연산에 대한 정보를 가지고 있지않는 것입니다
    • 예컨대, 예시의 곱하기 연산은 입력변수 q 가 add 의 출력값인지 아닌지 모릅니다
  • (이를 해결하기 위해서는) 뒤에서부터 앞으로 편미분값들을 구해야합니다
    • 그리고 연산 묶음을 하나의 연산으로 취급해야합니다
    • 즉, 연산 묶음 중에서 하나의 연산만 떼어놓고 봅니다
  • 입력값을 다음과 같이 가정해봅시다
    • (x=-2, y=5, z=-4)


  • 위의 A.G. 에서 했던 것처럼 각 입력 변수의 편미분값을 구해줍니다
    • 최종 출력값 f 에 대한 q 와 z 의 편미분값은 쉽게 구했습니다
  • 그럼 이제 더하기 연산에 초점을 맞춰봅시다
    • 기호 차이에 주의하세요 f() 와 q() 는 엄연히 다른 함수입니다
  • 더하기 연산만 있는 것처럼 편미분값을 구해봅니다
    • 이로써 중간 출력값 q 에 대한 x 와 y 의 편미분값을 얻었습니다
    • 이것으로 끝일까요 ? 약간 이상하지않나요 ?
  • 그렇습니다 우리는 q 에 대한 x 와 y 의 편미분값이 아닌
    • f 에 대한 x 와 y 의 편미분값을 구해야합니다
    • 왜냐하면, x 와 y 가 f 를 조정할 수 있도록 하고 싶은 것이기 때문입니다


  • 위에서 보았던 "연산들은 서로를 볼 수 없다"는 사실 때문에
    • 기존의 (연산이 하나인 경우의) 방법은 통하지 않습니다
  • 이러한 문제를 해결하는 것이 back propagation 이라는 개념입니다
    • 이 개념은 chain rule 을 사용해 연결된 연산 너머의 출력값에 대한 편미분값을 구하는 것입니다
    • 따라서, 이를 이용해 우리는 입력 변수값을 적절하게 조절할 수 있습니다

※ chain rule 은 연쇄 법칙 이라고도 합니다


  • 그럼 이전 예제에 back propagation 을 적용해봅시다
    • 우리는 더하기와 곱하기, 총 두 개의 연산을 붙였습니다
    • 더하기의 입력 변수에 대한 편미분값을 구하려면, 편미분을 두 번 해야합니다
    • 물론, 곱하기의 두 번째 입력 변수는 이에 해당되지 않습니다
  • 결과적으로 최종 출력값 f 가 증가하는 것을 볼 수 있습니다
  • 여기까지가 퍼셉트론을 이해하기 위한 배경지식입니다
  • 언급하지 않았지만, 최종 출력값을 감소시킬 수도 있습니다
    • step size 를 곱한 offset 을 더하지않고, 뺄 경우입니다
  • step size 의 크기는 극적인 연출을 위해 크게 설정했었습니다

이후 내용은 (3/5) 에서 이어집니다
감사합니다


'Computer Science > Artificial Intelligence' 카테고리의 다른 글

Introduction to A.I. (4/5)  (0) 2018.10.26
Introduction to A.I. (3/5)  (0) 2018.10.19
Introduction to A.I. (1/5)  (0) 2018.10.07
Summary of Reinforcement Learning  (0) 2018.08.25
Caffe at Windows #03  (3) 2018.06.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함