본문 바로가기

전체 글143

[CR3BP-1] 운동방정식 유도 삼체문제(three-body problem)에서 세 질점 중 한 개의 질점의 질량 \(m_3\)이 다른 두 질점 \(m_1\), \(m_2\)보다 훨씬 작아서 무시할 수 있을 정도라고 가정해 보자. 그러면 질점 \(m_3\)는 두 질점 \(m_1\) 및 \(m_2\)에는 어떤 영향도 미치지 못할 것이므로 두 질점 \(m_1\)과 \(m_2\)의 운동은 이체문제(two-body problem)로 간주할 있다. 이와 같이 삼체문제를 특수한 경우로 제한한 문제를 '제한된 삼체문제(restricted three-body problem)' 라고 한다. 제한된 삼체문제에서 두 질점 \(m_1\)과 \(m_2\)의 운동은 이체문제를 따르므로 그 궤도는 두 질점 공통의 질량중심점을 중심으로 한 원, 타원, 포물선, 쌍.. 2021. 4. 8.
삼체문제 (Three-Body Problem) 이체문제(two-body problem)에서는 전 우주에 질점(point mass)이 딱 2개 밖에 없으며 두 질점 사이에는 만유인력만 작용한다는 가정하에서 두 질점의 운동에 관한 문제를 다루었다. 이체문제는 해석적인 해가 존재했으며 두 질점의 절대적인 또는 상대적인 궤도의 모양은 원, 타원, 포물선, 쌍곡선 중의 하나였다. 삼체문제(three-body problem)는 이체문제에 질점 하나를 추가한 것이다. 전 우주에 질점이 3개밖에 없으며 세 질점 사이에 만유인력만 작용한다는 가정하에서 세 질점의 운동을 다루는 문제다. 삼체문제는 질점 하나를 더 추가했을 뿐이지만 이체문제와는 확연히 다른 매우 복잡한 운동의 모습을 보여준다. 우선 삼체문제는 해석적인 해가 없다. 수치적으로 운동 방정식을 풀어야 한다... 2021. 4. 7.
역전파 (Backpropagation) 계산 선형 레이어(또는 fully-connected layer, 완전 연결 레이어)는 레이어의 모든 뉴런이 이전 레이어의 모든 뉴런과 연결된 레이어이다. 선형 레이어는 다음과 같이 선형 방정식으로 표현할 수 있다. \[ \mathbf{z}^{(l+1) }=W^{(l) } \mathbf{a}^{(l) }+\mathbf{b}^{(l) } \] 여기서 위첨자 \(l\)은 \(l\)번째 은닉(hidden) 레이어를 뜻하고 \(W^{(l) }\)은 가중치(weights), \(\mathbf{b}^{(l) }\)는 바이어스를 나타낸다. 레이어의 출력 \(\mathbf{z}^{(l+1) }\)은 활성함수(activation function) \(\sigma^{(l+1)}\)를 통과하여 \(\mathbf{a}^{(l+1)}.. 2021. 3. 31.
벡터 함수를 행렬로 미분하기 다변수 스칼라 함수를 벡터로 미분한 것을 그래디언트(gradient), 벡터 함수를 벡터로 미분한 것을 자코비안(Jacobian), 스칼라 함수를 벡터로 두 번 미분한 것을 헤시안(Hessian)이라고 한다. 이번에는 스칼라 함수를 행렬로 미분해 보자. \( X=\begin{bmatrix} x_{11} & \cdots & x_{1n} \\ \vdots & \ddots & \vdots \\ x_{m1} & \cdots & x_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n}\) 가 행렬이고 스칼라 함수 \(f(X)\)가 주어졌을 때 \(f(X)\)에 대한 \(X\)의 미분은 다음과 같이 정의한다. \[ \frac{d f}{d X} = \begin{bmatrix} \frac.. 2021. 3. 27.
다변수 함수의 연쇄법칙 (Chain Rule) 연쇄법칙(chain rule)은 합성함수(composite function)의 도함수를 구할 때 유용하게 사용되는 법칙이다. 합성함수란 두개 이상의 함수를 연결하여 하나의 함수로 만드는 연산을 말한다. 연쇄법칙은 신경망을 학습시킬 때 사용되는 역전파(backpropagation) 알고리즘의 근간을 이룬다. 벡터 \(\mathbf{y}=[y_1 \ \ y_2 ]^T\)를 변수로 하는 다변수 스칼라 함수 \(f(\mathbf{y})\)의 미분 \(df\)는 다음과 같이 계산된다. \[ df= \frac{\partial f}{\partial y_1} dy_1 + \frac{\partial f}{\partial y_2} dy_2 \tag{1} \] 한편 \(y_1, \ y_2\)도 각각 \(\mathbf{x}=.. 2021. 3. 23.
바람 에너지 바람(wind)이 갖는 운동 에너지는 얼마일까. 그리고 그 중 얼마나 전기 에너지로 변환시킬 수 있을까. 바람 에너지를 전기 에너지로 변환해 주는 장치가 Wind Turbine이다. 대개 풍력터빈이라고 번역하지만 어린 시절 바람개비를 갖고 놀던 사람으로서 Wind Turbine을 바람터빈이라고 번역하면 어떨까 싶다. 바람터빈은 단독으로 운영되기도 하지만 보통 수 십개에서 수 백개를 한꺼번에 운용하는 것이 보통이다. 바람터빈을 모아 놓은 단지를 Wind Farm이라고 하는데 번역은 풍력단지라고 한다. TV동물농장의 애청자로서 이 역시 바람농장이라고 번역하면 어떨까 싶다. 속도가 \(v_1\)이고 질량이 \(m\)인 공기 덩어리가 갖는 운동 에너지는 \(E_{wind}=\frac{1}{2} mv_1^2\)이.. 2021. 3. 17.
Model Subclassing 멀티 입력 신경망 모델 구현 방법 Model Subclassing API를 사용하여 입력을 여러 개 갖는 즉, 멀티 입력 신경망 모델을 어떻게 구현하고 빌드(build)할 수 있을까. 강화학습의 DDPG알고리즘에서는 행동가치 함수(actor-value function)를 크리틱(critic) 신경망으로 구현한다. 크리틱 신경망은 입력으로 상태(state)와 행동(action)등 두 개를 받는데, 이를 Model Subclassing API를 이용해서 구현해 보자. 구현해야 할 신경망 구조는 다음 그림과 같다. 상태변수를 첫번째 은닉층에서 처리한 후 두번째 은닉층에서 행동과 병합하는 구조다. from tensorflow.keras.models import Model from tensorflow.keras.layers import Input.. 2021. 3. 16.
tf.reduce_sum 함수 tf.reduce_sum 은 텐서의 모든 성분의 총합을 계산하는 함수다. 예를 들어 다음과 같은 \(2 \times 1 \times 3\) 텐서 \(A\)를 구성하는 모든 성분의 총합을 구하기 위해서 tf.reduce_sum(A) 하면 21 이 나온다. 이 때 모든 차원(dimension)은 사라진다. import tensorflow as tf A = tf.constant([[[1, 2, 3]], [[4, 5, 6]]]) print("A=", A) print(tf.reduce_sum(A)) Output: A= tf.Tensor( [[[1 2 3]] [[4 5 6]]], shape=(2, 1, 3), dtype=int32) tf.Tensor(21, shape=(), dtype=int32) 텐서 \(A\)의.. 2021. 3. 12.
넘파이(numpy)에서 행렬 연산 행렬의 덧셈과 뺄셈은 행렬의 구성 성분(element) 단위의 계산이다. 덧셈과 뺄셈에서는 기본적으로 두 행렬의 행과 열의 크기가 같아야 한다. 예를 들어 행렬 \(A\)와 \(B\)의 덧셈과 뺄셈은 다음과 같다. \[ \begin{align} & A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \ \ \ B = \begin{bmatrix} 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix} \\ \\ & C=A+B = \begin{bmatrix} 8 & 10 & 12 \\ 14 & 16 & 18 \end{bmatrix} \\ \\ & D=A-B = \begin{bmatrix} -6 & -6 & -6 \\ -6 & -6 & -6 .. 2021. 3. 12.
넘파이(numpy)에서 행렬 모양 바꾸기, 자르기, 확장하기 먼저 \(2 \times 3\) 행렬 \(A\)를 생성해 보자. \[ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \] import numpy as np A = np.array([[1,2,3], [4,5,6]]) 이 행렬을 \(3 \times 2\) 로 바꾼 행렬 \(B\)를 만들려면 ndarray.reshape 라는 함수를 사용한다. \[ B = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} \] B = A.reshape((3,2)) print("A=",A, "\nB=",B) 소괄호가 두 개가 있음에 주의해야 한다. 성분의 배치 순서는 행렬 \(A\)의 첫 행의 처음부터 시작하여 오른쪽으로 가면서.. 2021. 3. 11.