Data/개념 정리

[밑러닝 3] 제 1고지, 미분 자동 계산 개념 정리

neulvo 2022. 11. 20. 01:27

1. 상자로서의 변수

변수

 

변수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

- 수학에서 쓰이는 수식에 따라서 변하는 값

- 컴퓨터 프로그래밍에서 아직 알려지지 않거나 어느 정도까지만 알려져 있는 양이나 정보에 대한 상징적인 이름

- 변인(variable) 또는 변수는 실험에서 관측 대상(종속 변인)과 조작 대상(독립 변인)을 말한다.

2. 변수를 낳는 함수

함수

 

함수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 함수는 입력값에 따라 출력값을 만들어 내는 ‘블랙 박스’와 같다. 수학에서 함수(函數, 영어: function) 또는 사상(寫像, 영어: map, mapping)은 어떤 집합의 각 원소

ko.wikipedia.org

- 수학에서 함수(函數, 영어: function) 또는 사상(寫像, 영어: map, mapping)은 어떤 집합의 각 원소를 다른 어떤 집합의 유일한 원소에 대응시키는 이항 관계이다.

- 한 변수의 값에 따라 다른 한 변수의 값이 정해질 때, 후자는 전자의 함수가 된다.

3. 함수 연결

자연 로그의 밑

 

자연로그의 밑 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 자연로그의 밑(base of the natural logarithm)[1]은 무리수인 상수로 2.71828   18284   59045   23536   02874   ⋯ {\displaystyle 2.71828\ 18284\ 59045\ 23536\ 02874\ \cdots } 로 나타내어지

ko.wikipedia.org

- 자연로그의 밑(base of the natural logarithm)은 무리수인 상수로 2.71828 18284 59045 23536 02874 $\cdots$ 로 나타내어지며 기호 $e$로 표기한다.

- $e$는 다음의 극한값으로 표현되며, 가장 일반적으로 정의되고 있는 야코프 베르누이의 방법이다.

$e=\lim_{n \rightarrow \infty}(1+\frac{1}{n})^{n}$

- $e$는 좌표평면상의 네 개의 그래프 $y=\frac{1}{x}$, $x$축, $x=1$, $x=t(>1)$ 로 둘러싸인 부분의 넓이가 1일 때, $t$의 값이다. 이 정의는 로그함수, 극한, 정적분의 선행 없이 쓸 수 있는 정의이다. 이를 정적분으로 표현하면 다음과 같다.

$\int_1^e \frac{1}{x}dx=1$

이때 정적분 값이 항상 양수이므로 넓이로 부를 수 있다.

- $e$는 무한급수로 표현할 수도 있다.

$e=\sum_{n=0}^\infty \frac{1}{n!}$

함수의 합성

 

함수의 합성 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 수학에서 함수의 합성(函數의合成, 영어: function composition) 또는 합성 함수(合成函數, 영어: composite function)는 한 함수의 공역이 다른 함수의 정의역과 일치하는

ko.wikipedia.org

- 수학에서 함수의 합성(函數의合成, 영어: function composition) 또는 합성 함수(合成函數, 영어: composite function)는 한 함수의 공역이 다른 함수의 정의역과 일치하는 경우, 두 함수를 이어 하나의 함수로 만드는 연산이다.

4. 수치 미분

미분

 

미분 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 미분(微分, 영어: derivative) 또는 도함수(導函數)는 어떤 함수의 정의역 속 각 점에서 함숫값의 변화량과 독립 변숫값의 변화량 비의 극한 혹은 극한들로 치역이

ko.wikipedia.org

- 미분(微分, 영어: derivative) 또는 도함수(導函數)는 어떤 함수의 정의역 속 각 점에서 함숫값의 변화량과 독립 변숫값의 변화량 비의 극한 혹은 극한들로 치역이 구성되는 새로운 함수다.

- 어떤 함수의 미분 계수 또는 순간 변화율을 구하는 것을 의미하며 미분 계수는 독립 변수 x의 증분에 관한 함숫값 ƒ(x)의 증분의 비가 한없이 일정한 값에 가까워질 때 그 일정한 값, 즉 함수에서 변수 x값의 변화량에 관한 함숫값 ƒ(x)의 변화량 비가 한없이 일정한 값에 가까워질 때 그 일정한 값 dy/dx로 나타낸다.

- 동사로서 미분(영어: differentiation)은 이러한 극한이나 도함수를 구하는 일, 즉 미분법을 뜻하기도 한다. 도함수에서 미분의 역연산을 통해 원시함수(antiderivative)를 구하는 것 역시 미분법(differential calculus)의 주요 주제다.

- 미분은 비선형 함수를 선형함수로 근사적으로 나타내려는 시도다. 비선형 함수를 미분하여 한 점 주변에서 1차 함수로 생각한다. 이를 반복하면 함수의 다항함수 근사를 얻으며 무한 번 하면 테일러 급수를 얻는다.

- 함수 미분은 존재하지 않을 수 있다. 미분이 모든 곳에서 존재하는 함수를 미분 가능 함수라고 한다. 미분 가능 함수는 반드시 연속 함수(=독립 변수의 변화가 미세할 때 함숫값의 변화 역시 미세한 함수)이어야 한다. 그러나 연속 함수가 반드시 미분 가능 함수이지는 않다. 

- 미분의 개념에 대한 여러 가지 일반화가 존재한다. 벡터 미적분학의 기울기다변수 미적분학의 야코비 행렬함수해석학의 프레셰 도함수 따위가 있다. 또한, 미분을 주어진 함수에 새 함수를 대응시키는 연산자(미분 연산자)로 생각할 수 있다.

- 미분 또는 미분 계수(微分係數, 영어: differential coefficient) 또는 순간 변화율(瞬間變化率, 영어: instantaneous rate of change)은 평균 변화율의 극한을 뜻하는 용어이다. 여기서 극한 대신 좌극한을 사용하면 좌미분 또는 좌미분 계수(左微分係數)의 개념을 얻으며, 우극한을 사용하면 우미분 또는 우미분 계수(右微分係數)의 개념을 얻는다.

$\frac{dy}{dx} = \lim_{\bigtriangleup x \rightarrow 0} \frac{\bigtriangleup y}{\bigtriangleup x} = \lim_{\bigtriangleup x \rightarrow 0} \frac{f(x+\bigtriangleup x) - f(x)}{\bigtriangleup x}$

(* 중앙 차분 : x-h 와 x+h 에서의 개울기를 구하는 방법 : $\frac{f(x+h)-f(x-h)}{2h}$, 상대적으로 오차가 적다)

5. 역전파 이론

역전파

 

역전파 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 역전파(逆傳播), 오차 역전파법(영어: Backpropagation 백프로퍼게이션[*]) 또는 오류 역전파 알고리즘은 다층 퍼셉트론 학습에 사용되는 통계적 기법을 의미한다.

ko.wikipedia.org

- 역전파(逆傳播), 오차 역전파법(영어: Backpropagation 백프로퍼게이션) 또는 오류 역전파 알고리즘은 다층 퍼셉트론 학습에 사용되는 통계적 기법을 의미한다.

- 기계 학습에서 사용되는 학습 구조로 다층 퍼셉트론이 있다. 일반적인 다층 퍼셉트론의 형태는 입력층 - 은닉층 - 은닉층 - ... - 출력층으로 구성되며, 각 층은 서로 교차되는 가중치 값으로 연결되어 있다. 출력층에서 제시한 값이 실제 원하는 값에 가까워지도록 학습하기 위해 통계적 방법에 의한 오차역전법을 사용한다.

- 오차역전법은 동일 입력층에 대해 원하는 값이 출력되도록 개개의 가중치를 조정하는 방법으로 사용되며, 속도는 느리지만 안정적인 결과를 얻을 수 있는 장점이 있어 기계 학습에 널리 사용되고 있다.

p64. [그림 5-4]와 같이 도함수의 곱을 함수 노드 하나로 그릴 수 있습니다. 이제 미분값이 전파되는 흐름이 명확해집니다. [그림 5-4]를 보면 'y의 각 변수에 대한 미분값'이, 즉 변수 y,b,a,x에 대한 미분값이 오른쪽에서 왼쪽으로 전파되는 것을 알 수 있습니다. 이것이 역전파입니다. 여기서 중요한 점은 전파되는 데이터는 모든 'y의 미분값'이라는 것입니다. 구체적으로는 $\frac{dy}{dy}, \frac{dy}{db}, \frac{dy}{da}, \frac{dy}{dx}$ 처럼 모두 'y의 ㅇㅇ에 대한 미분값'이 전파되고 있습니다.
머신러닝은 주로 대량의 매개변수를 입력 받아서 마지막에 손실 함수를 거쳐 출력을 내는 형태로 진행됩니다. 손실 함수의 출력은 (많은 경우) 단일한 스칼라 값이며, 이 값이 '중요 요소'입니다. 즉, 손실 함수의 각 매개변수에 대한 미분을 계산해야 합니다. 이런 경우 미분값을 출력에서 입력 방향으로 전파하면 한 번의 전파만으로 모든 매개변수에 대한 미분을 계산할 수 있습니다. 이처럼 계산이 효율적으로 이뤄지기 때문에 미분을 반대 방향으로 전파하는 방식 (역전파)를 이용하는 것입니다.

6. 수동 역전파

7. 역전파 자동화

p76. assert 문은 assert ... 형태로 사용합니다. 여기서 ... 부분이 '주장'에 해당하는 내용으로, 그 평가 결과가 True가 아니면 예외가 발생합니다.

Define-by-Run : 데이터를 흘려보냄으로써 (Run 함으로써) 연결이 규정된다는 (Define 된다는) 뜻입니다.

연결 리스트

 

연결 리스트 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

- 연결 리스트, 링크드 리스트(linked list)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다.

- 연결 리스트의 종류로는 단일 연결 리스트, 이중 연결 리스트 등이 있다.

- 연결 리스트는 늘어선 노드의 중간지점에서도 자료의 추가와 삭제가 O(1)의 시간에 가능하다는 장점을 갖는다. 그러나 배열이나 트리 구조와는 달리 특정 위치의 데이터를 검색해 내는데에는 O(n)의 시간이 걸리는 단점도 갖고 있다.

8. 재귀에서 반복문으로

 

꼬리 재귀 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 꼬리 재귀는 재귀 함수를 호출할 때 스택을 재사용하면서 메모리를 과도하게 사용하지 않도록 최적화하는 방법이다. 스칼라 import scala.annotation.tailrec // 예제 1 -

ko.wikipedia.org

import scala.annotation.tailrec

// 예제 1 - 꼬리재귀 팩토리얼
def factorial(x: Int): Int = {

 @tailrec
 def factorialHelper(x: Int, accumulator: Int): Int =
   if (x == 1) accumulator else factorialHelper(x - 1, accumulator * x)

 factorialHelper(x, 1)
}

// 예제 2 - 꼬리재귀 피보나치
def fibonacci(x: Int): Int = {

  @tailrec
  def fibonacciHelper(x: Int, a: Int, b: Int): Int =
    if(x == 0) a else fibonacciHelper(x - 1, b, a + b)

  fibonacciHelper(x, 0, 1)
}

p83. 재귀는 함수를 재귀적으로 호출할 때마다 중간 결과를 메모리에 유지하면서(스택에 쌓으면서) 처리를 이어갑니다. 일반적으로 반복문 방식의 효율이 더 좋은 이유입니다. 그러나 요즘 컴퓨터는 메모리가 넉넉한 편이라서 조금 더 사용하는 건 그리 문제가 되지 않습니다. 또한 '꼬리 재귀' 기법을 이용하여 재귀르 반복문처럼 실행할 수 있는 경우도 있습니다.

 

[scala] 꼬리 재귀(tail recursion)와 @tailrec

스칼라에서의 꼬리 재귀와 tailrec를 공부한다. 머리 재귀 예시이다. 일면 stack over flow가 발생할 수 있다. def sum1(list: List[Int]): Int = list match { case Nil => 0 case t :: tail => t + sum1(tail) } println(sum1((1 to 2).to

knight76.tistory.com

9. 함수를 더 편리하게

p90. 즉, 0차원 ndarray 인스턴스를 사용하여 계산하면 결과의 데이터 타입이 numpy.float64나 numpy.float32 등으로 달라집니다.

10. 테스트

 

unittest — Unit testing framework — Python 3.11.0 documentation

unittest — Unit testing framework Source code: Lib/unittest/__init__.py (If you are already familiar with the basic concepts of testing, you might want to skip to the list of assert methods.) The unittest unit testing framework was originally inspired by

docs.python.org

728x90