본문 바로가기

분류 전체보기369

[PCA–1] 주성분 분석 (PCA) 다음과 같이 2차원 공간(평면)상에 표현된 데이터 \(\mathbf{x}^{(i)}, \ i=1,...,m\) 이 있다. 데이터를 연결해 보니 데이터가 모두 직선상에 있다는 것을 알게 됐다고 하자. 이 직선으로 표현된 축(성분)을 \(z_1\)으로 한다면 애초에 \(x_1\)과 \(x_2\)의 두 축(성분)으로 이루어진 2차원 공간상의 데이터를 \(z_1\)축으로 이루어진 1차원 공간상에 표현할 수 있었을 것이다. 이와 같이 고차원 데이터를 저차원 데이터로 표현하는 것을 차원 축소(dimensionality reduction)라고 한다. 만약 데이터가 일직선 상에 있지 않고 약간 어긋나 있다면 어떨까. 그렇다고 하더라도 데이터가 나타내는 정보의 일부분을 잃는 것을 감수할 수 있다면 원래의 데이터 \(\m.. 2021. 2. 18.
[KKT 조건 - 3] 프라이멀 문제와 듀얼 문제 최적화 문제는 두 가지 관점에서 문제를 표현할 수 있는데 프라이멀 문제(primal problem)와 듀얼 문제(dual problem)가 그것이다. 어떤 문제에서는 프라이멀 문제보다도 듀얼 문제로 바꾸어 푸는 것이 더욱 효과적일 수 있다. 먼저 프라이멀 문제는 등식과 부등식 제약조건이 있는 본래의 최적화 문제를 말한다. \[ \begin{align} & p^\star = \min_{\mathbf{x}} f(\mathbf{x}) \\ \\ \mbox{subject to: } \ \ & g_i (\mathbf{x}) \le 0, \ \ \ i=1,...,m \\ \\ & h_j (\mathbf{x}) = 0, \ \ \ j=1,...,k \end{align} \] 이 문제에 대한 라그랑지안을 다음과 같이 .. 2021. 2. 17.
텐서와 변수 - 3 Tensorflow의 변수와 텐서와의 결정적인 차이는 가변성(mutability)이다. 변수는 값을 업데이트할 수 있지만, 텐서는 값을 변경할 수 없으며 새로운 텐서를 생성할 수 있을 뿐이다. 가변성이 무엇을 말하는지 구체적으로 알아보자. 다음 코드를 보자. a0 = tf.constant(2) a1 = a0 print(a0) print(a1) 이렇게 하면 a0라는 이름은 2라는 텐서 객체가 저장된 메모리의 위치를 가리킨다. a1도 a0와 동일한 메모리의 위치를 가리킨다. Output: tf.Tensor(2, shape=(), dtype=int32) tf.Tensor(2, shape=(), dtype=int32) 그런데 a1에 덧셈 연산을 하면 a1은 연산 결과인 3을 저장한 다른 메모리 위치를 가리킨다... 2021. 2. 11.
텐서와 변수 - 2 Tensorflow의 텐서는 일정한 데이터 타입(dtype이라고 함)을 가진 다차원 배열이다. numpy의 ndarray과 매우 유사하지만 변경이 불가능하다. 즉, 텐서는 생성된 후에는 변경할 수 없는 상수(constant)다. 모델에서 텐서를 추출할 수도 있지만 모델에 관계없이 직접 텐서를 생성할 수도 있다. 먼저 몇 가지 Tensorflow 함수를 이용해서 텐서를 생성해 보자. 다음은 tf.constant를 이용한 텐서의 생성 예다. a0 = tf.constant(2) a1 = tf.constant([1.0, 2.0]) a2 = tf.constant([[1, 2, 3], [4, 5, 6]]) a3 = tf.constant([ [ [1.0], [2.0] ], [ [3.0], [4.0] ], [ [5.0.. 2021. 2. 10.
텐서와 변수 - 1 신경망은 일종의 수학 함수다. 입력 데이터를 신경망에 주면 각 레이어를 거치면서 여러가지 연산을 거쳐서 출력 데이터가 산출된다. 신경망 모델에 입력과 출력이 있듯이 모델 내부의 각 레이어에도 입력과 출력이 있다. 각 레이어의 입력은 신경망의 가중치(weight) 또는 파라미터와 벡터/행렬 연산을 거쳐서 출력을 산출하게 된다. 신경망의 파라미터는 학습을 시작하면 최적화 알고리즘에 의해서 그 값이 변경되고 반복적으로 업데이트 된다. 이와 같은 반복적인 업데이트를 통해서 목적함수를 최적화하도록 신경망의 파라미터를 계산하는 것이 딥러닝의 핵심이다. 텐서(tensor)는 Tensorflow에서 사용하는 데이터 구조로서 다차원 배열(n-dimensional array)이다. Tensorflow 프로그램에서는 모든 .. 2021. 2. 9.
좌표변환 방법 비교 좌표변환 방법으로서 방향코사인행렬(DCM), 오일러각, 그리고 쿼터니언에 대해서 알아보았다. 이제 각각의 장단점을 비교해 보자. 먼저 DCM은 9개의 파라미터로 좌표변환을 표현한다. 그 중 6개는 구속조건을 만족해야 한다. 구속조건은 DCM이 단위직교 행렬(orthonormal matrix)이어야 한다는 것이었다. 이 구속 조건을 맞추기가 쉽지 않다는 것이 DCM의 큰 단점이다. 시간이 흐름에 따라서 좌표계의 자세가 달라질 경우 DCM의 미분 방정식을 세우고 이 방정식을 적분하여 매시간 마다 DCM을 계산해야 하는데, 이 때 수치 오차 때문에 계산된 DCM이 단위직교 행렬이 안될 수가 있다. DCM은 반드시 단위직교 행렬이어야 하므로 강제적으로 단위직교 행렬로 만들어야 할 필요가 있는데, 이것이 쉽지 않.. 2021. 2. 8.
쿼터니언 (Quaternions) 오일러의 회전 정리(Euler's rotation theorem)에 의하면 모든 좌표변환은 어떤 회전축과 그 회전축을 중심으로 하는 한번의 회전을 통해서 가능하다. 쿼터니언(quaternions)의 정의는 이 회전축과 회전각에 기반을 두고 있다. 좌표계 \(\{a\}\)를 회전축 \(\hat{p}\) 를 중심으로 회전각 \(\beta\) 만큼 회전하여 좌표계 \(\{b\}\)로 변환했다고 하면, 좌표계 \(\{a\}\)에서 좌표계 \(\{b\}\)로의 쿼터니언 \(q_b^a\)는 다음과 같이 정의된다. \[ q_b^a= \begin{bmatrix} q_0 \\ q_1 \\ q_2 \\ q_3 \end{bmatrix} = \begin{bmatrix} \cos \left( \frac{\beta}{2} \ri.. 2021. 2. 8.
짐벌락 (Gimbal Lock) 3자유도 짐벌 시스템에는 3개의 고리가 있다. 각각의 고리는 자신이 가진 단일 회전축을 중심으로만 회전할 수 있다. 한 고리의 회전축은 다른 두 고리의 회전축과 서로 직각을 이루도록 만들어졌다. 가장 바깥쪽 고리(빨강색)는 짐벌 시스템의 외부에 지지되어 있는 축을 중심으로 회전한다. 중간에 있는 고리(녹색)는 가장 바깥 쪽 고리에 회전축이 부착되어 있다. 가장 안쪽 고리(파랑색)는 회전축이 중간 고리에 부착되어 있다. 따라서 가장 바깥쪽 고리(빨강색)가 회전하면 안쪽에 있는 두개의 고리도 함께 움직이지만, 가장 안쪽에 있는 고리(파랑색)가 회전하더라도 그 바깥 쪽 고리는 영향을 받지 않는다. 이와 같이 3개의 고리가 서로 직각인 회전축을 갖는 구조를 3자유도 짐벌 시스템이라고 한다. 이러한 짐벌 시스템의.. 2021. 2. 7.
오일러각 (Euler Angles) 오일러각 좌표변환 방법은 좌표계 \(\{a\}\)에서 좌표계 \(\{b\}\)로의 좌표변환을 단 3개의 파라미터로 표현하는 방법이다. 좌표변환은 3개의 파라미터만으로 표현할 수 있으므로 오일러각 방법은 가장 경제적인 좌표변환 방법이라고 말할 수 있다. 오일러각 방법은 좌표계 \(\{a\}\)의 특정 좌표축을 시작으로 3번의 연속적인 회전을 통해서 좌표계 \(\{a\}\)를 좌표계 \(\{b\}\)로 변환한다. 먼저 공학의 여러 분야에서 통상적으로 사용되는 3-2-1 오일러각에 대해서 설명해 본다. 3-2-1 방식은 좌표계 \(\{a\}\)의 \(z\)축을 중심으로 회전하여 좌표변환하고, 다시 변환된 좌표계의 \(y\)축을 중심으로 회전하여 좌표변환하며, 마지막으로 변환된 좌표계의 \(x\)축을 중심으로 .. 2021. 2. 7.
방향코사인행렬 (DCM) DCM은 Direction Cosine Matrix의 약자다. 방향코사인행렬 또는 회전행렬(rotation matrix)이라고 한다. 기호로는 \(C_b^a\) 라고 쓰고 위 첨자와 아래 첨자에 각각 좌표계를 표시한다. 그리고 좌표계 \(\{a\}\)에서 좌표계 \(\{b\}\)로의 DCM이라고 읽는다. DCM은 \(3 \times 3\) 행렬이다. 그러면 9개의 행렬 성분(element)이 있는데, 각각은 다음과 같이 정의한다. \[ C_b^a = \begin{bmatrix} \hat{a}_1 \cdot \hat{b}_1 & \hat{a}_1 \cdot \hat{b}_2 & \hat{a}_1 \cdot \hat{b}_3 \\ \hat{a}_2 \cdot \hat{b}_1 & \hat{a}_2 \cdot.. 2021. 2. 6.