<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>for1overson1y_.log</title>
        <link>https://velog.io/</link>
        <description>Amateur data scientist &amp; student</description>
        <lastBuildDate>Fri, 21 Jul 2023 11:40:42 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>for1overson1y_.log</title>
            <url>https://velog.velcdn.com/images/for1overson1y_/profile/baf0bb78-5fe2-4d40-a94b-a6b081045cf0/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. for1overson1y_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/for1overson1y_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[선형대수학 - 고윳값과 대각화]]></title>
            <link>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EA%B3%A0%EC%9C%B3%EA%B0%92%EA%B3%BC-%EB%8C%80%EA%B0%81%ED%99%94</link>
            <guid>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EA%B3%A0%EC%9C%B3%EA%B0%92%EA%B3%BC-%EB%8C%80%EA%B0%81%ED%99%94</guid>
            <pubDate>Fri, 21 Jul 2023 11:40:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>출처
<a href="https://www.youtube.com/watch?v=gKQ3doGGZdU&amp;t=12s">이상엽MATH</a></p>
</blockquote>
<h1 id="1-고윳값과-벡터">1. 고윳값과 벡터</h1>
<h2 id="1-정의">1) 정의</h2>
<p>체 F에 대한 벡터공간 V 위의 선형사상 
$L : V -&gt; V$ 에 대하여 다음 두 조건을 만족하는 $\lambda( \in F)$는 고윳값이라고 하고 $v (\in F)$를 고유벡터라고 한다. </p>
<p><strong>중요</strong></p>
<p>1) 고유벡터는 0벡터이면 안된다.
2) v가 선형사상에 들어간 결과가 $\lambda v$ 여야 하고 이때, $\lambda$는 스칼라임</p>
<p>-&gt; 람다가 고윳값이고 v가 고유벡터인 것임</p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/36c5bf65-81eb-4c76-b7c3-402df0c59c5d/image.png" alt=""></p>
<ul>
<li><p>고유는 유일한의 의미가 아님</p>
</li>
<li><p>행렬은 곧 선형사상임</p>
</li>
<li><p>고윳값이라는 개념을 선형사상에 접목가능해짐</p>
</li>
<li><p>행렬의 고윳값 = 선형사상의 고윳값</p>
</li>
<li><p>선형사상 : 벡터를 변환하는 일종의 함수, 선형사상도 일종의 벡터라고 볼 수 있다. </p>
</li>
<li><p>선형사상 벡터의 방향 : 고유벡터, 선형사상 벡터의 크기 : 고윳값이라고 간단하게 생각 가능하다. </p>
</li>
<li><p>선형사상의 본질을 기술하기 위해 고윳값과 고유벡터가 중요한 것</p>
</li>
</ul>
<p><br><br><br></p>
<h3 id="예시-1">예시 1</h3>
<p>$$
v = (2,3);  , L \rightarrow  M = \begin{pmatrix}1&amp;-2\3&amp;-4\ \end{pmatrix}
$$</p>
<h4 id="풀이과정">풀이과정</h4>
<p>$$</p>
<p>L(v) \rightarrow Mv = \begin{pmatrix}1&amp;-2\3&amp;-4\ \end{pmatrix} \begin{pmatrix}2\3\ \end{pmatrix} = \begin{pmatrix}-4\-6\ \end{pmatrix}</p>
<p>$$
$$
\begin{pmatrix}-4\-6\ \end{pmatrix} = -2 \begin{pmatrix}2\3\ \end{pmatrix}
$$ </p>
<ul>
<li>이때 식에 의해 유도된 $\lambda$는 -2임</li>
<li>그러면 고유벡터는 $\begin{pmatrix}2\3\ \end{pmatrix}$임</li>
<li>이처럼 행렬 M(1,-2,3,4)이 하나의 숫자로 바뀌었고 이를 고윳값이라고 한다. </li>
</ul>
<p><br><br><br><br><br><br></p>
<h2 id="2-고유방정식">2) 고유방정식</h2>
<p>: 고윳값을 찾는 방법
: 어떤 정사각행렬, 선형사상에 대응하는 고윳값을 찾기 위해서 만든 방정식. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/2473ff7d-2c00-4b04-b19e-eec958f2baa4/image.png" alt=""></p>
<ul>
<li>이때 $det(\lambda I_n - M)$ 자체 식을 고유다항식이라고 한다. 
<br> <br> </li>
</ul>
<h3 id="유도">유도</h3>
<p>$$
L(v) = \lambda v \rightarrow Mv = \lambda v
$$
(단, v는 0행렬이 아님)</p>
<p>$$ 
= \lambda v - MV = (\lambda I_n - M)v = 0행렬
$$</p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/886916cc-b686-4dc4-9958-c33da2025603/image.png" alt=""></p>
<p>예제 1. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/a62f97e7-a395-4c60-91ad-52b4aa72ebd1/image.png" alt="">
예제 2. 1과 반대로 람다를 구하는 법
<img src="https://velog.velcdn.com/images/for1overson1y_/post/fc660136-f0f4-431d-b772-8d237fadc2df/image.png" alt=""></p>
<p><br><br><br><br><br><br></p>
<h2 id="3-고유공간">3) 고유공간</h2>
<p>: 앞서 고윳값을 찾았다면 이번엔 고윳값에 대응되는 고유벡터를 찾기 위함이다. </p>
<p><strong>고유공간이란?</strong>
<img src="https://velog.velcdn.com/images/for1overson1y_/post/5c2b4648-6aba-4c41-8b07-d54197f647a1/image.png" alt=""></p>
<h3 id="유도-1">유도</h3>
<p>$$
L(v) = \lambda v
=&gt; 
L(v) = \lambda I_v(v)
$$</p>
<ul>
<li>식을 맞춰주기위해 람다v를 저런식으로 씀.</li>
<li>똑같이 v가 나와야하므로 항등사상에 v를 넣어줌
$$
\lambda I_v(v) - L(v) = \overrightarrow 0 
=&gt; (\lambda I_v - L)(v) = \overrightarrow 0 
$$</li>
<li>이때 중요한것은 (v)를 찾는 것이기 때문에 찾기 위해선 다음과 같은 식을 쓸 수 있다. 
$$
ker(\lambda I_v - L)
$$</li>
<li>이 커널을 $(\lambda I_v - L)$로 표현되는 선형사상의 핵이라고 하는데 </li>
<li>이 커널식이 하나의 공간이다. </li>
<li>이를 고유공간이라고 하고 이 고유공간의 원소가 곧 고유벡터가 된다.  </li>
<li>단, 고유벡터는 0벡터가 아니다. </li>
</ul>
<p><br><br></p>
<h3 id="예제">예제</h3>
<p>$M = \begin{pmatrix}1&amp;-2\3&amp;-4\ \end{pmatrix}, \lambda = -1$일 때, 고유벡터를 찾으시오</p>
<br>

<p><strong>식</strong></p>
<p>$$
(\lambda I_v - L)(v) = \overrightarrow 0 \ 
$$
$$
= (-1\begin{pmatrix}1&amp;0\0&amp;1\ \end{pmatrix}(I_n) -1\begin{pmatrix}1&amp;-2\3&amp;-4\ \end{pmatrix})\begin{pmatrix}v_1\v_2\ \end{pmatrix}
$$
$$
= \begin{pmatrix}-2&amp;2\-3&amp;-3\ \end{pmatrix}\begin{pmatrix}v_1\v_2\ \end{pmatrix} = \overrightarrow 0 
$$</p>
<p>$$
= \begin{pmatrix}-2&amp;2&amp;0\-3&amp;-3&amp;0\ \end{pmatrix} \rightarrow \begin{pmatrix}1&amp;-1&amp;0\0&amp;0&amp;0\ \end{pmatrix} 
$$
$$ 
v_1 = v_2 \quad , \quad v = s\begin{pmatrix}1\1\ \end{pmatrix} 
$$</p>
<ul>
<li>가우스 조던 소거법 이용</li>
<li>이때 s(1,1)의 (1,1)을 기저라고 함. </li>
<li>고유벡터는 (s,s)인데 s는 0이 아님. </li>
</ul>
<p><br><br><br></p>
<h3 id="예제-1">예제</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/91005d25-1f2b-4ddf-8fe1-101cc3044874/image.png" alt="">
$\lambda = 1 , or , 2$
<img src="https://velog.velcdn.com/images/for1overson1y_/post/0a703192-76a8-49a9-ad2f-3e15dbb6f083/image.png" alt="">
<img src="https://velog.velcdn.com/images/for1overson1y_/post/96430075-85e6-435e-9c59-0390b36d9a85/image.png" alt=""></p>
<p><br><br><br>
<br><br><br></p>
<h1 id="2-대각화">2. 대각화</h1>
<h2 id="1-대각화">1) 대각화</h2>
<ul>
<li><p>앞서 살펴본 고윳값과 고유벡터를 응용하는 부분</p>
</li>
<li><p>대각화를 통해 하나의 선형사상을 여러 선형사상으로 분해해볼 수 있음 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/7937a931-46da-41c5-bc2a-5d22db5de75e/image.png" alt=""></p>
</li>
<li><p>B는 대각행렬(대각선에만 성분이 존재하고 나머지는 없는) 이다. </p>
</li>
</ul>
<br>

<h3 id="예제-2">예제</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/b99de2fb-38d7-48a0-b24a-bfad870e8246/image.png" alt=""></p>
<br>
해답 : 

<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/8578e016-79ad-43c6-a49a-1a514c2f6668/image.png" alt=""></p>
<br>

<p>$$
P^{-1}AP = B \
&lt;=&gt; \
A = PBP^{-1}
$$</p>
<p>이처럼 A라는 선형사상을 여러개의 선형사상으로 쪼갤 수 있다. </p>
<br>

<h3 id="정리">정리</h3>
<p>nxn 행렬 A에 대하여 다음 두 명제는 동치이다. </p>
<ol>
<li>A는 대각화 가능한 행렬이다</li>
<li>A는 n개의 선형독립인 고유벡터를 갖는다. </li>
</ol>
<br>

<h3 id="증명">증명</h3>
<p>A는 대각화 가능한 행렬이다 -&gt; A는 n개의 선형독립인 고유벡터를 갖는다. </p>
<ul>
<li><p>A는 대각화 가능하므로
$P^{-1}AP = B$라고 쓸 수 있음
그리고 양변에 P를 곱하면 (사용하기 쉽게)
$AP = PB$</p>
</li>
<li><p>P는 정사각행렬, nxn의, 그러면 다음과 같이 
$P = (p_1, p_2, ..., p_n)$
B의 대각성분은 $\lambda_1, \lambda_2, ..., \lambda_n$이라 하자. 
그리고 이걸 위의 $AP = PB$에 넣어보자
다음과 같은 식이 성립한다. </p>
</li>
</ul>
<p>$$
AP=A(p_1, p_2 , ..., p_n) = (Ap_1, Ap_2, ...., Ap_n)
$$
$$
PB= (\lambda_1 p_1, \lambda_2p_2, ...., \lambda_np_n)
$$</p>
<p>이때, 위의 AP = PB임. 
따라서, </p>
<p>$$
Ap_1 = \lambda_1 p_1, ...., Ap_n=\lambda_np_n
$$</p>
<p>이때, P는 가역행렬이다. </p>
<p>이는 P의 기약행사다리꼴이 단위행렬 I의 꼴이 된다는 것이다.</p>
<p>이는 다른말로 P에는 n개의 선도1(<em>각 행에서 0이 아닌 첫 원소는 1이고 이를 선도 1이라고 함</em>)이 존재한다는 것이다. </p>
<p>그러면 P의 행이든 열이든 아무튼 찢어놓은 벡터들은 n차원공간의 기저를 이룬다. (0과 1로만 이루어져있음)</p>
<p>기저를 이루려면 선형생성을 해야되고 선형독립이라는 특성을 가져야 한다.</p>
<p>그러면 $p_1$에서부터 $p_n$은 선형독립이다. </p>
<p>그러면 $p_1$에서부터 $p_n$은 전부 0행렬이 아니다. (선형독립이므로)</p>
<p>$Ap_1 = \lambda_1 p_1$ 이 식은 고류벡터를 논할 때썼던 식. 그러면 $P_1$은 고유벡터, $\lambda_1$는 고윳값. 앞서 $P$는 0벡터가 아니라 했으므로 고윳값, 고유벡터의 조건을 만족한다. </p>
<p>그러면 A가 대각화가능하다는 전제 하에 식을 전개했는데 고윳값, 고유벡터도 성립하는 것을 확인했으므로 1번과 2번은 동치이다. </p>
<p><br><br><br></p>
<h2 id="2-대각화하는-방법">2) 대각화하는 방법</h2>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/bc8cfd2e-4da9-4479-9fa1-d9fce01ba1ce/image.png" alt=""></p>
<p><strong>예시</strong>
<img src="https://velog.velcdn.com/images/for1overson1y_/post/b019dd10-2760-4e45-a117-4a4fb5d087f9/image.png" alt=""></p>
<ul>
<li>대각화가 되려면, 고유기저의 원소가 2개는 잡혀줘야 함.</li>
<li>즉, 대각화 불가능</li>
</ul>
<p><br><br><br></p>
<h2 id="3-중복도">3) 중복도</h2>
<ul>
<li>대각화가 가능한지를 알려주는 또다른 방법</li>
<li>고유공간의 차원 = 고유기저의 원소 개수</li>
<li>기하적 중복도 = 고유기저의 원소개수</li>
<li>대수적 중복도 = 람다를 구하는 식이 몇거듭제곱이냐</li>
<li>기하적 중복도 &lt;= 대수적 중복도</li>
<li>기하적 중복도와 대수적 중복도가 모든 고윳값에 대해 항상 같으면 그 행렬은 대각화가 가능하다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/89c792e4-c414-4225-bd27-b7b2a2d3cc36/image.png" alt=""></li>
</ul>
<p><br><br><br></p>
<h2 id="4-닮음-불변량">4) 닮음 불변량</h2>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/bf863027-6c89-4f74-971f-0389525a831d/image.png" alt=""></p>
<ul>
<li>이때, B는 대각행렬일 필요가 없다. </li>
<li>위의 식을 만족하면 다음과 같은 성질을 동시에 가진다. </li>
</ul>
<ol>
<li>A의 행렬식과 B의 행렬식은 일치한다. </li>
<li>A가 가역행렬이면 B도 가역행렬이다. A가 비가역행렬이면 B도 비가역행렬이다.</li>
<li>A의 rank랑 B의 rank는 같다. </li>
<li>A의 nullity와 B의 nullity가 같다.</li>
<li>A와 B의 고유다항식(고유방정식의 좌변)이 같다. </li>
<li>A와 B의 고윳값은 같다. </li>
<li>A와 B의 고유공간의 차원(기저의 원소개수)도 같다. </li>
<li>A와 B의 주대각성분들의 총합은 같다. </li>
<li>A와 B의 대수적 중복도가 같다. </li>
<li>A와 B의 기하적 중복도가 같다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[선형대수학 - 수학적 벡터]]></title>
            <link>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EC%88%98%ED%95%99%EC%A0%81-%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EC%88%98%ED%95%99%EC%A0%81-%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Sun, 16 Jul 2023 09:48:05 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>출처
<a href="https://www.youtube.com/watch?v=Q8NkThsTp_g&amp;list=PL127T2Zu76FuVMq1UQnZv9SG-GFIdZfLg&amp;index=4">이상엽 MATH</a></p>
</blockquote>
<br>
<br>

<h1 id="0-용어정리">0. 용어정리</h1>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/ad40e321-67f3-4c37-835b-655a378d61d3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/6252046d-1edc-4f16-8af9-9c2ba6b4926e/image.png" alt=""></p>
<ul>
<li><p>대수학의 대상 : 수 뿐만 아니라 수를 대신할 수 있는 모든 것.</p>
</li>
<li><p>대수학 : 대수구조를 연구하는 학문</p>
</li>
<li><p><u>대수구조 : 집합, 집합에 부여된 연산</u></p>
<ul>
<li><p>반군(결합법칙) : 집합과 그 위의 결합법칙을 따르는 하나의 이항 연산을 갖춘 대수구조</p>
</li>
<li><p>모노이드(결합법칙, 항등원) : 항등원을 갖는 반군 반군이므로 결합법칙도 성립한다. </p>
</li>
<li><p>군(결합법칙, 항등원, 역원) : 역원을 갖는 모노이드</p>
</li>
<li><p>아벨군(결합법칙, 교환법칙, 항등원, 역원)</p>
</li>
<li><p>환(결합법칙, 교환법칙, 항등원, 역원|결합법칙)</p>
</li>
<li><p>가군</p>
</li>
<li><p>가환환(결합법칙, 교환법칙, 항등원, 역원|결합법칙, 교환법칙)</p>
</li>
<li><p>나눗셈환(결합법칙, 교환법칙, 항등원, 역원|결합법칙, 항등원, 역원)</p>
</li>
<li><p>체(결합법칙, 교환법칙, 항등원, 역원|결합법칙, 교환법칙, 항등원, 역원)</p>
<br>
<br>

</li>
</ul>
</li>
</ul>
<h4 id="반군">반군</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/8eb06fe0-3429-4049-8174-159fda7056f4/image.png" alt=""></p>
<ul>
<li>위의 대수구조는 <u>결합법칙이 성립함</u> = <strong>반군임</strong> </li>
<li><u>항등원은 존재하지 않음</u> = <strong>모노이드는 아님</strong><br>
<br>

</li>
</ul>
<h4 id="군">군</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/6d4d8136-b770-4287-b0ad-1c1c8a8d9fd7/image.png" alt=""></p>
<ul>
<li>역원을 가지므로 군</li>
</ul>
<br>
<br><br>
<br><br><br>

<h1 id="1-벡터공간">1. 벡터공간</h1>
<h2 id="1-벡터공간-1">1) 벡터공간</h2>
<ul>
<li><p>벡터공간 : 체 F에 대한 가군 $(V, + , \cdot)$</p>
<ul>
<li>체도 환의 하위구조이기 때문에 가군이라고 부를 수 있다. </li>
</ul>
</li>
<li><p>벡터 : 아벨군 V의 원소</p>
</li>
<li><p>스칼라 : 체 F에서 떼온 원소</p>
</li>
<li><p>+, $\cdot$ 는 벡터공간에 부여된 어떤 연산을 의미한다. </p>
<ul>
<li>이 때 +는 벡터의 덧셈이고 $\cdot$은 벡터의 스칼라배다</li>
<li>연산은 기본적으로 함수이다. +라고해서 더하기인가?라고 생각하면 안된다는 것. f(x)처럼 +라는 기호의 함수이다. 그러나 기본적인 성질은 존재한다. </li>
<li><ul>
<li>: VxV -&gt; V인 함수 (정의역 : V끼리의 곱집합)</li>
</ul>
</li>
<li>$\cdot$ : FxV -&gt; V인 함수 (정의역 : F와 V간의 곱집합) </li>
<li>곱집합 : 집합 안의 원소들끼리 만들어질 수 있는 모든 집합의 개수<br>
<br>
### (1) 특징</li>
</ul>
</li>
<li><p>벡터공간은 구조상 <u>가군의 일종.</u></p>
</li>
<li><p>아벨군을 본체로 하고 환의 하위구조인 체의 원소를 받아 곱셈이 정의된 대수공간.</p>
</li>
<li><p>가군은 본래 환에서부터 원소를 가져오지만 스칼라를 정의함에 있어서 환까지 필요없기 때문에 체에서 가져온다. </p>
<u>
- 본체에 있던 아벨군 원소 = 벡터</u>
<u></li>
<li><p>체의 원소 = 스칼라</p>
</u>
<u></li>
<li><p>스칼라를 왜 체에서 가져오느냐? </u> 체는 복소수, 유한체, 실수 등의 집합이고 스칼라는 실수의 집합으로 구성되기 때문이다. </p>
</li>
<li><p>벡터가 유일하게 존재하면 의미가 없다. 둘 이상의 벡터가 있어야 크기와 방향을 논할 수 있다. 크기와 방향은 상대적인 것이기 때문이다. </p>
</li>
<li><p>이 두 벡터의 방향이 서로 같냐 다르냐는 하나의 벡터를 줄이거나 늘이거나해서 다른 벡터와 일치시킬 수 있느냐의 문제로 전환된다.</p>
</li>
<li><p>어떤 한 벡터를 줄이거나 늘이거나 = <u>스칼라배</u></p>
</li>
<li><p>그러므로 아벨군 하나에 부여된 덧셈이 아니라 체까지 확장해서 스칼라배까지 정의해줬을 때 완전체가 된다. </p>
</li>
</ul>
<br>
<br>

<h3 id="2-벡터집합으로-불리기-위한-공리-조건">(2) 벡터집합으로 불리기 위한 공리, 조건</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/5235d5a8-6669-4a57-8a3d-4d1e18f6c5be/image.png" alt=""></p>
<ol>
<li><p>V라는 집합에 대해 덧셈구조가 부여되었을 때 (V, +)는 아벨군을 형성해야된다. = 1)결합법칙, 2)교환법칙, 3)항등원, 4)역원을 성립해야된다. </p>
</li>
<li><p>체에서부터 원소하나를 부여받아 스칼라배 ($\cdot$)가 정의가 되었을 때, $(V, + , \cdot)$의 대수구조가 F에 대한 가군을 성립해야된다. = 1)교환법칙, 3)분배법칙 성립, 2)항등원에 대한 계산구조 성립해야된다. 이때 3번의 +는 일반 사칙연산기호이다. 함수가 아님!</p>
<br>
=> 벡터공간임을 확인하기 위해서는 위의 모든 공리를 만족해야 한다. 
<br>
<br>

</li>
</ol>
<h3 id="3-벡터공간-예시">(3) 벡터공간 예시</h3>
<p>예시가 다음과 같을 때 </p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/108805db-8d04-4765-b57d-faa4c42d74cf/image.png" alt=""></p>
<ul>
<li>v는 벡터</li>
<li>+는 특수하게 정의된 함수. 여기서는 u+v하겠다 = uv다.<br>

</li>
</ul>
<h3 id="1-v가-아벨군인지-확인">1. $(V,+)$가 아벨군인지 확인</h3>
<p>: 벡터공간으로 정의되기 위한 공리 1번을 만족하는지 확인</p>
<br>

<p><strong>1) (u+v)+w = (uv) + w를 만족해야 함</strong></p>
<ul>
<li>앞서 정의한 +는 곱하기를 하는 함수였음.</li>
</ul>
<p>-&gt; (uv)+w가 됨</p>
<p>-&gt; uv의 결과가 k원소라고 하면 k+w 는 또 +함수에의해 kw가 됨</p>
<p>-&gt; 결국 (uv)+w = uvw처럼 됨</p>
<p>-&gt; 반대도 마찬가지 + 기호가 곱하기 함수이기 때문임</p>
<br>
<br>
<br>

<p><strong>2) u+v = uv = vu = v+u</strong> 
-&gt; +는 곱하기처럼 사용됨. </p>
<br>
<br>
<br>

<p><strong>3) u + 1 = u1 = u</strong>
: 임의의 실수 u에 무언가(여기선 1)을 덧셈연산한 결과 u가 나옴, u에 x를 더해서 똑같은 u가 결과로 나왔기 때문에 이를 통해 1은 항등원 역할을 하는 것을 알 수 있다. (물리적벡터에서의 0벡터가 여기서는 1로 치환된 것이라고 생각하면 된다.)</p>
<br>
<br>
<br>

<p><strong>4) u + $1 \over u$ = u $\times$ $1 \over u$ = 1</strong>
: 무언가($1 \over u$)를 더했더니 1이 나온다 $1 \over u$ &lt;&lt; 이건 u의 역원일 수밖에 없음. 또한, u를 양의 실수 집합으로 잡았으므로 u의 역수도 양의 실수 집합 내부에 있을 것임. </p>
<p>=&gt; 위 네가지 공리를 만족함. <u>즉, 아벨군 형성이 되었음을 알 수 있음</u>
<br><br></p>
<h3 id="2-v---cdot-가-가군이-형성되는지-확인">2. $(V, + , \cdot)$ 가 가군이 형성되는지 확인</h3>
<h4 id="1-kmu--k-um--umk--umk--ukm--kmu">1) $k<em>(m</em>u) = k <em>u^m = (u^m)^k = u^{mk} = u^{km} = (k</em>m)*u$</h4>
<p>-&gt;  $\cdot$ 함수를 지수로 정의하였음. 
-&gt; 그래서 m이 지수로 올라감
-&gt; 그리고 k도 지수로 올라감
-&gt; 지수 km을 다시 앞으로 빼줄 수 있음. </p>
<br>
<br>
<br>

<h4 id="2-1u--u1--u">2) $1u$ = $u^1$ = u</h4>
<br>
<br>
<br>


<h4 id="3-kmcdotuv">3) $(k+m)\cdot(u+v)$</h4>
<p>: 이 때 k와 m의 +는 벡터끼리에만 적용되는 함수이고 k와 m 둘 다 스칼라이므로 여기선 사칙연산의 +임을 주의해야 한다. u와 v의 경우 벡터이므로 정의된 함수처럼 곱해주면 된다. </p>
<p>-&gt; 벡터끼리의 연산만 +가 곱하기처럼 들어감 여기선 스칼라끼리(F)의 곱이기 때문에 일반 +부호</p>
<p>-&gt; 그래서 k+m은 일반 더하기, u+v는 둘 다 벡터이므로 곱하기처럼 해줌
$$
= (u+v)^{k+m} = (uv)^{k+m} = u^{k+m}v^{k+m} = u^ku^mv^mv^k
$$
: 이때, u와 v는 V의 원소이므로 벡터이다. 그러므로 +는 함수이다. 그렇기 때문에 새로 정의된 함수처럼 +로 식을 아래와같이 나눠줄 수 있는 것이다. 
$$
= u^k + u^m + v^k + v^m = ku + mu + kv + mv = ku+mu+kv+mv
$$</p>
<br>

<ul>
<li><p>위 두가지를 확인해봐야 한다. 두가지를 만족하면 벡터공간이다. 즉, 예시의 집합과 스칼라는 벡터공간이다.  </p>
</li>
<li><p>이 벡터공간을 정의하고 만족하는지 확인하는 것이 중요한 이유는 물리적벡터에서 살펴본 벡터가 아닌 벡터공간의 원소인 벡터를 정의하고 사용하고자 하기 때문이다. </p>
</li>
</ul>
<p><br><br><br>
<br></p>
<h2 id="2-선형생성">2) 선형생성</h2>
<h3 id="1-부분벡터공간">(1) 부분벡터공간</h3>
<p>: 벡터공간 및 다른 대수구조들 모두 집합에서부터 비롯되었으므로 부분집합처럼 부분적으로 존재할 수 있다. 벡터공간 또한 대수구조(아벨군, 체)등으로 이루어져 있으므로 부분벡터공간이 존재할 수 있다. <u> 이때, 벡터공간 V상에서 정의된 덧셈과 스칼라배에 대해 그 자체로써 벡터공간이 되는 V의 부분집합 W를 V의 부분벡터공간이라고 한다. </u>
<br>
<br></p>
<h3 id="2-선형생성--">(2) (선형)생성 &gt;&gt; ????</h3>
<p>: 벡터공간 V의 공집합이 아닌 부분집합 $S = \lbrace v_1, v_2, ..., v_n \rbrace$ <em>(v들은 전부 벡터공간 V의 원소들이므로 당연히 S또한 벡터이다.)</em> 내의 벡터들의 가능한 모든 선형결합(<em>일차결합 v에 k배하고 덧셈뺄셈하던</em>)으로 이루어진 V의 부분벡터공간을 S의 (선형)생성(span(S))라 한다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/29994f44-f255-4a08-bf26-e2b037f20a10/image.png" alt=""></p>
<p>-&gt; 이때 S가 span(S)를 생성한다.라고 말함</p>
<br>
<br><br>
<br>

<h3 id="예시">예시)</h3>
<p>$$
S = \lbrace (1,0), (0,1) \rbrace
$$
$$
F = R(실수 전체 집합)
$$
$$
span(S) = \lbrace k(1,0) + m(0,1) | k,m \in F \rbrace
= \lbrace (k,m) |k,m \in F \rbrace
$$</p>
<p>-&gt; F는 실수 집합, k,m은 F에서 왔으므로 k와 m도 실수 </p>
<p>-&gt; 즉, (k,m)은 $R^2$</p>
<p>-&gt; <u>즉, s라는 집합은 2차원 벡터공간 혹은 유클리드 공간을 생성한다. </u></p>
<p>-&gt; <u>의미해석 : 2차원 실수 벡터 공간이 이루어지는 데 있어서 S의 두 벡터가 가장 근본적인 역할을 할 수 있다.</u></p>
<br>
<br>
<br>
<br>
<br>

<h3 id="3-선형독립">(3) 선형독립</h3>
<p>: 집합 내의 벡터들이 상호연관성이 있느냐고 묻는 개념이다. </p>
<ul>
<li>응용할 때 중요</li>
<li>왜? 얼마나 계산이 복잡한지 알 수 있기 때문</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/fcd1dbf6-5ff1-4b9d-a6b7-bfa5f4c0dd59/image.png" alt=""></p>
<p>즉, 
$$
k_1v_1 + k_2v_2 +...+k_nv_n = \overrightarrow 0 
$$
을 만족하는 $k_n$의 해가 0뿐이 없다면 집합 S를 선형독립집합이라고 한다.</p>
<p><br><br></p>
<h4 id="선형종속">선형종속</h4>
<p>: S는 선형종속집합이다. 
-&gt; 0이 아니라 다른 해가 존재하기 때문에
<img src="https://velog.velcdn.com/images/for1overson1y_/post/96b9ea68-f182-44db-bad3-b598dead51b1/image.png" alt=""></p>
<p><br><br></p>
<h4 id="선형독립">선형독립</h4>
<p>: S는 선형독립집합이다. 선형독립집합일 때 계산도 간단하고 결과도 간단하게 나온다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/d87d2580-1d51-4fcf-aeb3-c80cfea76279/image.png" alt=""></p>
<br>
<br>
<br>
<br>
<br>

<h1 id="3-여러-벡터-공간">3. 여러 벡터 공간</h1>
<h2 id="1-노름공간">(1) 노름공간</h2>
<p>: 노름이 부여된 
$$
K-벡터공간(V, ||\cdot||)노름이란
$$  </p>
<p>$$
∀u, v \in V, ∀ k \in K
$$
에 대해 아래 세 조건을 만족시키는 함수를 의미한다.<br><img src="https://velog.velcdn.com/images/for1overson1y_/post/0be7cbe4-39ed-4606-a3f0-3d3e08b5ed1a/image.png" alt=""></p>
<ul>
<li><p>앞서 살펴본 벡터공간이 벡터의 크기에 대한 내용이 누락되어 있기 때문에 노름공간에서 크기를 커버함</p>
</li>
<li><p>기본 벡터구조에 벡터 크기를 넣지 않은 이유는 내적공간이라는 것이 노름공간의 상위공간이기 때문에 벡터를 정의하는데는 관여하지 않지만 벡터들로부터 의미있는 결과를 도출하기 위한 내적공간으로부터 노름공간이 유도되기 때문에 앞서 살펴보지 않았음. </p>
</li>
<li><p>원래 벡터공간은 체에서부터 원소를 받아 F라고 정의되었는데 여기선 K라고 붙여놓았음</p>
</li>
<li><p>실수집합과 복소수집합만 K로 하기 위해서 다른 기호를 사용함</p>
</li>
<li><p>왜 실수와 복소수로 한정짓느냐 : 노름공간의 모태인 내적공간이 여기서 정의되기 때문 </p>
</li>
<li><p>V라는 벡터공간에 $||\cdot||$이라는 연산을 부여해준 것</p>
</li>
<li><p>$\cdot$은 이자리에 원소가 들어간다. V의 원소가 들어감</p>
</li>
<li><p>노름은 세가지 조건을 만족시키는 함수</p>
</li>
<li><p>V는 0에서부터 무한대까지의 실수로 잡힌다. </p>
<br>

</li>
</ul>
<p>1) k라는게 곱해지면 밖으로 절대값으로 뺄 수 있다 
$$
||kv|| = ||k||||v||
$$
<br></p>
<p>2) 두 벡터를 더한다음에 노름 계산할 때랑 두벡터 노름을 계산하고 더할 때 방향이 같지 않는 이상 후자가 더 클 것임. 
<br></p>
<p>3) 벡터 v의 노름이 0이다 = 벡터가 0벡터이다. </p>
<p><br><br><br><br><br></p>
<h2 id="2-내적공간">2) 내적공간</h2>
<p>: 기본적으로 벡터공간에 추가적으로 내적연산을 한 것</p>
<ul>
<li><p>이 내적공간이 왜 노름공간의 상위구조이냐면</p>
</li>
<li><p>벡터가 자기자신에 대해 두번 내적을 해준뒤 그것에 대해 루트를 씌우면 노름이 됨</p>
</li>
<li><p>노름 -&gt; 내적을 만들려면 조건이 하나 더 붙음</p>
</li>
<li><p>내적 -&gt; 노름은 쉽지만 노름 -&gt; 내적은 어렵기 때문에 상위호환이라고 부름
<img src="https://velog.velcdn.com/images/for1overson1y_/post/1750a0b1-ad7f-4293-9386-b15854b77b49/image.png" alt=""></p>
</li>
<li><p>$&lt;\cdot, \cdot&gt;$은 내적연산기호(범용적)를 의미함</p>
</li>
<li><p>이 내적공간은 실수, 복소수 집합으로 한정됨</p>
</li>
<li><p>3번의 위의 바 표시는 켤레복소수 표시 </p>
</li>
<li><p>$&lt;v, v&gt;$ 는 자기자신에 대한 내적 -&gt; v의 놈의 제곱</p>
</li>
</ul>
<p><br><br></p>
<h3 id="1번예시">1번예시</h3>
<p>$$
&lt;(1,0) + (0,1), (2,3)&gt;
$$</p>
<p>$$
= &lt;(1,1), (2,3)&gt; = 1\cdot2 + 1\cdot3 = 5
$$
<br></p>
<p>$$
&lt;(1,0),(2,3)&gt; + &lt;(0,1), (2,3)&gt; 
$$
$$
= 1\cdot2 + 0\cdot3 +0\cdot2 + 1\cdot3 = 5
$$</p>
<br>
<br>
<br><br><br>

<h2 id="3-유클리드-공간">3) 유클리드 공간</h2>
<p>: 단순히 n차원의 실수공간
: 음이 아닌 정수 $n$에 대하여  $n$차원 유클리드 공간 $R^n$은 실수집합 $R$의 $n$번 곱집합이며, 이를 $n$차원 실수 벡터 공간으로써 정의하기도 한다. </p>
<br>
이 위의 내적 

<p>$$</p>
<p>&lt;u, v&gt; = \displaystyle\sum_{i=1}^{n}{(u_iv_i)} = u \cdot v</p>
<p>$$
을 정의하면 점곱, 스칼라곱이라고도 한다. </p>
<br>
<br>
<br><br><br>

<h1 id="4-기저와-차원">4. 기저와 차원</h1>
<h2 id="0-차원">0) 차원</h2>
<p>: 차원이란 해당 <u>벡터공간</u>의 <u>기저</u>의 <strong>원소의 개수</strong></p>
<h2 id="1-기저">1) 기저</h2>
<p>벡터공간 V의 부분집합 B가 선형독립이고 V를 생성할 때, B를 V의 기저라 한다. 
<br></p>
<h3 id="1-정규기저">(1) 정규기저</h3>
<p>: 다음을 만족하는 노름공간 V의 기저 B를 정규기저하고 한다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/dcc84cd1-11e9-4016-a69d-86cd000ef3ae/image.png" alt=""></p>
<ul>
<li>노름공간 V의 모든 원소 ∀b(b는 벡터) 의 노름값이 1이 나와야 함. <br>

</li>
</ul>
<h3 id="2-직교기저">(2) 직교기저</h3>
<p>: 다음조건을 만족하는 내적공간 V의 기저 B를 직교기저라 함
<img src="https://velog.velcdn.com/images/for1overson1y_/post/5f828e0d-25d9-434e-8d2d-df03b1fa9c07/image.png" alt=""></p>
<ul>
<li><p>기저란 집합에서 서로다른 $b_1, b_2$를 가져옴</p>
</li>
<li><p>그리고 이 $b_1, b_2$의 내적결과는 0이 나와야 한다. </p>
</li>
<li><p>내적결과가 0이 나온다 = cos90도 = 직교한다. </p>
</li>
</ul>
<br>

<h3 id="3-정규직교기저">(3) 정규직교기저</h3>
<p>: 앞의 두개를 모두 만족</p>
<ul>
<li><p>각이 90도라 0이 나오고</p>
</li>
<li><p>모든 벡터(원소)들의 노름 값이 1</p>
</li>
<li><p>그래서 다음과 같이 표시되는 기저를 <strong>표준기저</strong>라고함. </p>
</li>
</ul>
<p>$$
\lbrace (1,0,0,...), (0,1,0...,0),..., (0,0,...,1) \rbrace = 
$$
$$
\lbrace e_1, e_2, ..., e_n \rbrace
$$</p>
<p><br><br><br></p>
<h3 id="예시-1">예시</h3>
<p>$$ 
V = R^2
$$
$$
B_1 = \lbrace (1,0), (0,1) \rbrace
$$
$$
span(B_1) = k(1,0) + m(0,1) = (k,m) = R^2 
$$</p>
<p>1) $B_1$이 선형독립 집합인가? 
A. yes 둘을 0으로 만들어주는건 0뿐임</p>
<br>
2) B로 V를 k,m으로 생성도 함. 

<p>=&gt; 그러므로 B는 V의 기저다. </p>
<p><br><br><br></p>
<h3 id="예시2">예시2</h3>
<p>$$
S = \lbrace (1,0),(0,1),(1,1) \rbrace
$$
는 기저인가 아닌가. </p>
<p>A. 아님
생성은 가능한데 선형종속임.</p>
<p><br><br><br></p>
<h3 id="예시3">예시3</h3>
<p>다음 B들은 정규기저, 직교기저가 되는가</p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/4a28fbbf-6576-4177-9994-8b6300711933/image.png" alt=""></p>
<p>$B_1$ : 정규기저안됨, 직교기저안됨</p>
<p>-&gt; 처음 벡터 b의 노름이 2가 나옴</p>
<p>-&gt; 내적결과가 $2\cdot1+0\cdot1 = 2$</p>
<p>$B_2$ : 정규기저됨, 직교기저안됨</p>
<p>$B_3$ : 정규기저안됨, 직교기저됨</p>
<p>$B_4$ : 정규기저됨, 직교기저됨 =&gt; <strong>표준기저임</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[선형대수학 - 벡터]]></title>
            <link>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Sat, 15 Jul 2023 15:17:53 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>출처
<a href="https://www.youtube.com/watch?v=nX6-bgPFsA8&amp;list=PL127T2Zu76FuVMq1UQnZv9SG-GFIdZfLg&amp;index=3">이상엽 MATH</a></p>
</blockquote>
<h1 id="1-벡터와-좌표계">1. 벡터와 좌표계</h1>
<h2 id="1-평면벡터">1) 평면벡터</h2>
<p>벡터 : 속도를 나타내기위해 고안된 것으로 화살표로 표시한다. 화살표의 방향은 벡터의 방향이며 길이가 벡터의 크기를 나타낸다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/cfb24b66-4b38-461f-99c2-3098daf997ad/image.png" alt=""></p>
<ul>
<li>$R^2$ : x축, y축처럼 두개의 r, 실수축으로 만들어진 좌표평면계(2차원 평면)</li>
<li>시점 : 벡터가 시작하는 점</li>
<li>종점 : 벡터가 끝나는 점</li>
</ul>
<p>$$
B(b_1, b_2) 
$$</p>
<ul>
<li>이건 어떤 좌표평면 상의 점의 위치가 아닌 x축이 얼만큼 움직였을 때 y축으로 얼만큼 움직이는지를 나타낸 것이다. </li>
<li>즉, 특정 좌표가 아닌 변화량이다. </li>
<li>그러므로 좌표평면 상에 우선 표현은 해두지만 화살표가 동일한 위치, 동일한 길이라면(변화량이 같다면) 좌표평면에서 어디에 존재하든 다 똑같은 벡터로 취급한다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/a0f7acb5-8cc3-4718-8c33-17743b15eb5f/image.png" alt=""></p>
<ul>
<li>v와 방향이 같은 벡터 : a,d</li>
<li>v와 크기가 같은 벡터 : d,c</li>
<li>v = d</li>
<li>$v(1-0, 2-0)$ = $v(1,2)$ </li>
<li>$d(-1-(-2), 3-1)$ = $d(1,2)$ -&gt; 종점에서 시점빼준다. </li>
</ul>
<h2 id="2-공간벡터">2) 공간벡터</h2>
<p>: $R^3$에서 크기와 방향의 의미를 모두 포함하는 표현 도구</p>
<ul>
<li>축이 세개</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/6fa10ed6-9f49-4330-a074-a8c75868694d/image.png" alt=""></p>
<h2 id="3-n차원-벡터">3) n차원 벡터</h2>
<p>: $R^n$ 상의 벡터 v = $(v_1, v_2, ..., v_n)$ </p>
<br>

<ul>
<li><p>2차원, 3차원 등에서 원소를 3개 써줬듯이 n차원에서는 원소를 n개를 나열하면 된다. </p>
</li>
<li><p>$\overrightarrow{AB}$ = $(b_1 - a_1, b_2 - a_2, ...., b_n - a_n)$</p>
</li>
<li><p>0벡터 : $\overrightarrow{0}$ = (0,0,....,0) 모든 성분이 0으로 이루어진 벡터</p>
</li>
<li><p>두 벡터 v, w가 같다는 의미는 $v_1 = w_1$..등 같은 자리의 원소가 동일하다는 뜻이다. </p>
</li>
</ul>
<br>
<br>
<br>

<h1 id="2-벡터의-연산">2. 벡터의 연산</h1>
<h2 id="1-노름">1) 노름</h2>
<ul>
<li>벡터의 크기(또는 길이) 라고도 한다. 유클리드 거리처럼 구해준다. </li>
<li>벡터 화살표의 길이를 구하는 느낌이라고 생각해도 좋다. </li>
</ul>
<p>$$ ||v|| = \sqrt {v_1^2 + v_2^2 +...+ v_n^2} 
$$</p>
<ul>
<li>노름이 1인 벡터를 <strong>단위벡터</strong>라고 한다. </li>
<li>정규화는 벡터의 원소를 벡터의 노름으로 나눈 것을 뜻한다.</li>
<li>하나의 벡터만 1이고 나머지 성분이 0인 벡터를 표준단위벡터라고 한다.</li>
<li>이때, $e_i$의 i는 몇번째 원소가 1인지를 나타낸다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/918c900e-3dad-4482-bfcb-db42b78e5eb4/image.png" alt="">
그러면 다음과 같이도 나타낼 수 있다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/7833bc27-a340-4ecf-b932-700de4b05600/image.png" alt=""></li>
</ul>
<br>
<br>
<br>

<h2 id="2-선형결합">2) 선형결합</h2>
<h3 id="1-벡터의-덧셈과-뺄셈">(1) 벡터의 덧셈과 뺄셈</h3>
<p>: 두 벡터 v, w가 있을 때 두 벡터를 더하고 뺀다는 것은 두 벡터의 같은 위치에 있는 원소들끼리 더하고 뺀다는 것과 같다.
$$
v\pm w = (v_1 \pm w_1 , ..., v_n \pm w_n)
$$</p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/5f342d2a-8ee9-43e3-9e24-acb27142f40c/image.png" alt="">
<strong>벡터의 덧셈</strong></p>
<ul>
<li>벡터 v,w를 이용해 삼각형을 만들면 (v의 종점과 w의 시점을 연결) 밑변이 v와 w를 합친 것이 된다. (삼각형법)</li>
</ul>
<p><strong>벡터의 뺼셈</strong></p>
<ul>
<li>v에 -w를 더해준다고 생각하면 된다. </li>
</ul>
<br>

<h3 id="2-벡터의-실수배">(2) 벡터의 실수배</h3>
<p>: 길이를 k만큼 늘이고 줄인다고 생각하면 된다. k는 행렬의 상수배처럼 모든 원소에 적용된다.
$$
kv = (kv_1, kv_2, ..., kv_n)
$$</p>
<br>

<h3 id="3-선형일차-결합">(3) 선형(일차) 결합</h3>
<p>: $R^n$ 의 벡터 w가 임의의 실수 $(k_1, k_2, ..., k_n)$ 에 대하여 </p>
<p>$$
w = k_1v_1+ k_2v_2 + ... + k_rv_r
$$
의 형태(k상수배해주고 덧셈뺄셈해준)로 쓰여지면 w를 v벡터의 선형(일차)결합이라고 한다.</p>
<ul>
<li>v에 대해 일차식으로 표현이 되기 때문에 일차결합이라고도 한다. v위에 지수가 존재하거나 하면 일차(선형)결합이 아니라 비선형결합이라고 한다. </li>
</ul>
<br>
<br>
<br>

<h2 id="3-스칼라곱">3) 스칼라곱</h2>
<p>: 한 벡터가 다른 벡터의 방향에 대해 가한 힘에 의해 변화된 스칼라(크기) 정곱 또는 내적</p>
<ul>
<li>벡터가 크기, 방향 두가지 특성을 가지고 있기 때문에 서로다른 두 벡터에 대해 곱이 있었을 때 크기만을 반환하는 스칼라곱과 방향만을 반환하는 벡터곱 두가지를 얻을 수 있다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/f2dffbb7-05fa-4e52-9437-53b69c69c9a5/image.png" alt=""></p>
<br>

<h3 id="1-코사인표">(1) 코사인표</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/bc08100d-41ac-4f3c-8039-4536df8eb369/image.png" alt=""></p>
<br>


<h3 id="2-예시">(2) 예시</h3>
<p>Q. $||v|| = 3$이고 $||w||=1$일 때 같은 w가 v와 같은 방향으로 힘이 작용할 때 w가 얼만큼의 힘을 가하는가? </p>
<ul>
<li><p>동일방향 
: 3x1 = 3</p>
</li>
<li><p>방향이 같지 않을 때 
: w를 삼각형법을 이용해 구한 a와 b벡터의 합이라고 가정하면 v방향으로 a만큼의 힘을 가했다고 생각하면 된다. 
즉, $||v|| \times ||a||$이다. 이때, $||a||$ =  $||w|| \times cos\theta$이다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/465b143a-bde2-4340-912f-6d749090abab/image.png" alt=""></p>
<br>

</li>
</ul>
<h3 id="3-스칼라곱-증명">(3) 스칼라곱 증명</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/76b28eeb-6c24-4037-b536-8473689f92b2/image.png" alt=""></p>
<p>$$
||W-X||^2 = ||v||^2 + ||W||^2 - 2VM
$$
$$
= VM = 1 /2  {||V||^2 + ||W||^2 - ||W-V||^2}
$$
$$
\frac12 \lbrace { (v_1^2 + v_2^2 ... v_n^2) + (w_1^2 + w_2^2 ... + w_n^2) - (w_1 - v_1)^2 - ... - (w_n^2 - v_n^2)}\rbrace
$$
$$
= \frac12 \lbrace {2w_1v_1 + ... + 2w_nv_n} \rbrace
$$
$$
= v_1w_1 + ... + v_nw_n
$$</p>
<br>

<h3 id="4-벡터의-연산-성질">(4) 벡터의 연산 성질</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/b45e3bed-fa0d-4185-9934-5c1f1599e191/image.png" alt=""></p>
<ul>
<li>벡터의 합에서는 결합법칙이 성립한다.</li>
<li>벡터에 0을 더해도 똑같은 벡터가 나온다. 0은 항등원이다.</li>
<li>-u는 역원으로 u와 더하면 0벡터가 나온다. </li>
<li>k와 m은 실수이다. </li>
<li>스칼라곱에 대한 결합법칙은 성립하지 않고 의미도 없다. <em>(스칼라곱은 스칼라(실수)가 나오기 때문에 벡터에 상수배하는 느낌이 된다.)</em></li>
</ul>
<br>
<br>
<br>

<h2 id="4-벡터곱가위곱-외적">4) 벡터곱(가위곱, 외적)</h2>
<p><strong>주의점</strong></p>
<ol>
<li>벡터곱은 $R^3$인 3차원 공간에서만 정의된다.</li>
</ol>
<p>: 방향은 두 벡터에 동시에 수직이고, 크기는 두 벡터의 평행사변형의 면적(크기)인 $R^3$상의 벡터 </p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/79429249-3490-4f7d-9d53-430524508988/image.png" alt=""></p>
<ul>
<li>v와 w와 동시에 수직인 방향이 vxw이다.</li>
<li>방향은 v와 w중 뭐가 앞에 오느냐에 따라 다르다.<em>(곱하는 순서에 따라 다르다.)</em> v가 앞에 오면 그림과 같이 위로, w가 앞에 오면 아래로 향한다.<br>

</li>
</ul>
<h3 id="1-예시">(1) 예시</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/0554a9bb-b0f8-4f5a-863d-834066edbdd3/image.png" alt=""></p>
<p>$$
VM = \lbrace (v_2w_3 - w_2v_3) ,- (v_1v_3 - v_3w_1) , (v_1w_2 - w_1v_2) \rbrace = (0,0,6)
$$</p>
<ul>
<li>VM은 공동으로 수직인 방향으로 평행사변형의 면적만큼의 길이를 가지게 된다. </li>
</ul>
<br>

<h3 id="2-벡터-곱의-성질">(2) 벡터 곱의 성질</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/c94832f6-65e1-4b93-bf00-c28b9f72f461/image.png" alt=""></p>
<ul>
<li>동일한 벡터를 곱해주면 0벡터가 나온다. 동일한 벡터를 가지고 평행사변형을 만들 수 없기 때문이다. </li>
<li>교환법칙, 결합법칙 둘 다 성립하지 않는다. </li>
</ul>
<br>
<br><br>

<h1 id="3-벡터의-응용">3. 벡터의 응용</h1>
<h2 id="1-직선의-표현">1) 직선의 표현</h2>
<p>: $R^2$ 또는 $R^3$에서 위치벡터 <em>(원점을 시점으로하는 벡터)</em> 가 a인 점 A를 지나며 방향벡터 <em>(직선이 늘어나는 방향을 지시하는 벡터)</em> 가 v인 직선상의 임의의 점 X의 위치벡터 x는 </p>
<p>$$
x = a + kw
$$
을 만족한다. (단, k는 임의의 실수)</p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/ad0ea32e-ee40-4104-bf3d-cd04fa8c2bd9/image.png" alt=""></p>
<h3 id="1-예시-1">(1) 예시</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/2595db83-0ad4-4c17-8fc1-22c75ed3dd66/image.png" alt=""></p>
<br>
<br>

<h2 id="2-평면의-표현">2) 평면의 표현</h2>
<p>: $R^3$에서 위치벡터 <em>(원점을 시점으로하는 벡터)</em> 가 a인 점 A를 지나며 법선벡터 <em>(평면에 수직인 벡터, 아래그림에서 하늘색선)</em> 가 v인 평면상의 임의의 점 X의 위치벡터 x는 다음식을 만족한다. </p>
<ul>
<li>법선 벡터 = 평면상의 서로 다른 두 직선의 방향벡터들의 벡터곱으로 구한다. </li>
</ul>
<p>$$
(x-a)V = 0
$$
<img src="https://velog.velcdn.com/images/for1overson1y_/post/59728bc8-075b-42bb-88cf-411ffbbaf6e9/image.png" alt=""></p>
<ul>
<li>남색선 : x-a (삼각형법)</li>
<li>하늘색선(V) : 평면에 수직 -&gt; 노란선과도 수직 -&gt; cos90도(=0) -&gt; 따라서 스칼라 0</li>
</ul>
<h3 id="1-예시-2">(1) 예시</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/cc8c5221-d95b-49f5-ae2f-305891cea77e/image.png" alt=""></p>
<ul>
<li><p>벡터곱 </p>
<br> 
$$
VM = u_1u_2 = \lbrace (v_2w_3 - w_2v_3) , - (v_1v_3 - v_3w_1) ,  (v_1w_2 - w_1v_2) \rbrace = (1,1,1)
$$
<br> 
</li>
<li><p>위치벡터 x 구하기 </p>
</li>
</ul>
<p>$$ 
x = (x,y,z) 
$$</p>
<p>$$
a = (2,0,0)
$$
$$
(x-a)V = 0
$$
<br></p>
<p>$$
(x-2,y,z)(1,1,1) = x-2+y+z = 0
$$</p>
<p>-&gt; 이 식을 평면의 방정식이라고 한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[선형대수학 - 행렬과 행렬식]]></title>
            <link>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%ED%96%89%EB%A0%AC%EA%B3%BC-%ED%96%89%EB%A0%AC%EC%8B%9D</link>
            <guid>https://velog.io/@for1overson1y_/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%ED%96%89%EB%A0%AC%EA%B3%BC-%ED%96%89%EB%A0%AC%EC%8B%9D</guid>
            <pubDate>Sat, 15 Jul 2023 12:35:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>출처</strong>
<a href="https://www.youtube.com/watch?v=83UnOz6HiOY&amp;list=PL127T2Zu76FuVMq1UQnZv9SG-GFIdZfLg&amp;index=2">이상엽MATH</a></p>
</blockquote>
<h2 id="1-행렬">1. 행렬</h2>
<p>우리가 자주보는 이 네모난 직사각형의 숫자들의 나열을 행렬이라고한다. 행렬은 연립일차방정식(ax+b = c)를 풀기 위해 방법론 중 하나로써 등장했다.
<img src="https://velog.velcdn.com/images/for1overson1y_/post/219863d9-6891-4b85-b0c5-3d7175f28492/image.png" alt=""></p>
<h3 id="1-용어정리">1) 용어정리</h3>
<p><strong>1. 행렬</strong>
표기법은 다음과 같다. 보통 대문자를 사용하며 A = (x1, x2..)이렇게 되어있으면 행렬 A라고 말하고 표기한다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/b31e01ba-47d8-423a-9f36-c7b7cb65db4f/image.png" alt=""></p>
<ul>
<li><p>항, 성분, 원소 : 안에 있는 $x$들</p>
</li>
<li><p>행 : 행렬의 가로줄</p>
</li>
<li><p>열 : 행렬의 세로줄</p>
</li>
<li><p>mxn행렬 : m개의 행과 n개의 열로 이루어져있는 행렬</p>
</li>
<li><p>$a_{ij}$에서 $i$는 행을 $j$는 열을 의미함. $x_{12}$면 1행 2열의 (1,2) 원소임</p>
</li>
<li><p>주대각선 : 행렬의 왼쪽 위에서 오른쪽 아래를 가로지르는 대각선</p>
</li>
<li><p>대각성분 : 주대각선 위에 있는 성분, 행과 열의 지표수(아래숫자)가 같은 성분</p>
</li>
<li><p>대각행렬 : 주대각선 위에 있는 성분만 숫자고 나머지가 0인 행렬</p>
</li>
<li><p>영행렬 : 모든 성분이 0인 행렬</p>
</li>
<li><p>전치행렬 : 주대각선 기준으로 원래행렬에서 뒤집은 행렬 $a_{ij}$가 $a_{ji}$로 바뀐다. </p>
</li>
<li><p>대칭행렬 : 원래 행렬 $A$와 $A^t$가 같은 행렬</p>
</li>
<li><p>정사각행렬 : 행, 열의 수가 같음</p>
</li>
<li><p>단위행렬 : 모든 대각성분이 1이고 그 외의 성분은 0인 정사각행렬 </p>
<ul>
<li>보통 $I_n$이런식으로 표현함. 그러면 nxn의 단위행렬이라고 생각하면 됨.     </li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/6b80f642-f127-4592-a551-96f6fe24842c/image.png" alt=""></p>
<br>


<h3 id="2-행렬의-연산">2) 행렬의 연산</h3>
<p><strong>1. 덧셈 뺄셈</strong> 
: 같은 자리에 있는 원소들끼리 더하고 빼준다. </p>
<p><strong>교환법칙, 결합법칙 성립한다.</strong></p>
<p>$A$ = $\begin{pmatrix}1&amp;0\0&amp;1\ \end{pmatrix}$</p>
<p>$B$ = $\begin{pmatrix}1&amp;2\3&amp;4\ \end{pmatrix}$</p>
<p>$A + B$ = $\begin{pmatrix}2&amp;2\3&amp;5\ \end{pmatrix}$</p>
<p>$A - B$ = $\begin{pmatrix}0&amp;-2\-3&amp;-3\ \end{pmatrix}$</p>
<br>

<p><strong>2. 상수배</strong>
: 모든 원소에 상수를 곱해준다. </p>
<p><strong>단, 결합법칙은 성립하되 교환법칙이 성립하지 않는다.</strong> </p>
<p>$A$ = $\begin{pmatrix}1&amp;0\0&amp;1\ \end{pmatrix}$</p>
<p>2A =  $\begin{pmatrix}2&amp;0\0&amp;2\ \end{pmatrix}$</p>
<br>

<p><strong>3. 행렬끼리의 곱셈</strong>
: mxn 행렬과 nxr행렬을 곱할 때 여기서 n으로 같은 것 처럼 앞 행렬의 열개수와 뒤의 행렬의 행개수가 같아햐한다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/d3d1097b-a858-4f04-847a-7fa492eeafca/image.png" alt=""></p>
<p>우리가 자주 하는 f와 g함수 연산에서도 행렬곱의 원리가 적용된다.
<img src="https://velog.velcdn.com/images/for1overson1y_/post/ae1f544d-a170-442b-9b45-28a63de055af/image.png" alt=""></p>
<br>
<br>
<br>

<h2 id="2-연립일차방정식">2. 연립일차방정식</h2>
<h3 id="1-행렬의-표현">1) 행렬의 표현</h3>
<p>연립일차방정식을 행렬로 표현하는 방법은 가우스조던 소거법, 역행렬 이렇게 두가지가 있다. </p>
<p>$
\begin{cases}
x+2y=5\
2x+3y=8
\end{cases}$</p>
<ul>
<li><p>$\begin{pmatrix}1&amp;2&amp;5\2&amp;3&amp;8\ \end{pmatrix}$ =&gt; 가우스 조던 소거법, 첨가행렬</p>
</li>
<li><p>$\begin{pmatrix}1&amp;2\2&amp;3\ \end{pmatrix}$ $\begin{pmatrix}x\y\ \end{pmatrix}$ = $\begin{pmatrix}5\8\ \end{pmatrix}$ =&gt; 역행렬 이용</p>
</li>
</ul>
<br>

<h3 id="--가우스-조던-소거법">- 가우스 조던 소거법</h3>
<p>우리가 흔히 연립방정식할 때 사용하던 방식
컴퓨터 알고리즘 짤 때 유용하게 사용됨
다항신 보간법, 역행렬 구하기 등에서도 다양하게 사용됨</p>
<br>

<p><strong>기본 행 연산</strong>
: 항을 간단화하고 항을 간단화했을 때 해가 변형하지 않아야 함. 이 두가지 원칙을 지키기 위해 다음과 같은 수단을 사용한다. </p>
<ol>
<li>한 행을 상수배함</li>
<li>한행을 상수배하여 다른 행에 더함</li>
<li>두 행을 맞바꿈</li>
</ol>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/b79cd52f-7527-4608-9437-08c087f8232a/image.png" alt=""></p>
<p>연립을 풀면 3번째, 6번째처럼 행사다리꼴이 나오는데 이 때 3번은 행사다리꼴, 6번을 기약 행사다리꼴이라고 한다. 그리고 행사다리꼴까지 풀면 가우스 소거법, 기약행사다리꼴까지 풀면 가우스 조던 소거법이라고 한다. </p>
<ul>
<li>기약 행 사다리꼴 : 1이 포함된 행사다리꼴을 기준으로 나머지성분을 0으로 맞춰준 것 </li>
</ul>
<br>

<h3 id="--역행렬-이용">- 역행렬 이용</h3>
<p><strong>선조건</strong>
: 행렬 A의 역행렬이 존재한다. </p>
<p>선조건이 충족되면 $AX = B$에서 $X = A^{-1}B$ 성립
<img src="https://velog.velcdn.com/images/for1overson1y_/post/8cac7aec-cacb-46e7-98d3-60ec262b1433/image.png" alt=""></p>
<br>
<br>
<br>

<h2 id="3-행렬식">3. 행렬식</h2>
<h3 id="1-행렬식이란">1) 행렬식이란?</h3>
<p>: 행렬 =&gt; 수로 바꾸는 특별한 함수</p>
<p><strong>표기법</strong>
$detA$ , $\vert A \vert$</p>
<p><em>단, A에 따라 표기법이 달라진다.</em>
<em>3x3일 때 행을 앞으로 뺄 필요는 없고 필요에 의하면 열을 앞으로 빼도 됨</em>
         $a_{12}, a_{11}...-&gt; a_{23}, a_{33}$
<em>또한 앞으로 뺄 행이나 열은 몇번째든 상관 없음. 3번째 열이나 행을 앞으로 빼도 됨</em></p>
<h4 id="3x3행렬">3x3행렬</h4>
<ol>
<li>기본
<img src="https://velog.velcdn.com/images/for1overson1y_/post/076f75cc-5317-41bd-89e8-1349d2722bfd/image.png" alt=""></li>
</ol>
<ol start="2">
<li>사루스법칙
<img src="https://velog.velcdn.com/images/for1overson1y_/post/21eef968-5d36-40a1-b138-3088b0be6e62/image.png" alt=""></li>
</ol>
<br>

<h3 id="2-역행렬">2) 역행렬</h3>
<p>: 행렬식이 0이면 역행렬이 존재하지 않는다.</p>
<p>$AA^{-1} = I$(단위행렬)</p>
<p><em>실수x에 곱해서 1이 나오는 숫자를 역원이라고했었고 행렬은 이 역원을 역행렬이라고 함</em>
<img src="https://velog.velcdn.com/images/for1overson1y_/post/007c5056-7dd1-4218-b680-1889946fdc38/image.png" alt=""></p>
<p>$$</p>
<p>AadjA = detAI</p>
<p>$$</p>
<ul>
<li>행렬식이 0이 아니다 = $detA$가 0이 아니다.</li>
<li>detA넘기기</li>
</ul>
<p>$$
A \times adjA\over detA
$$</p>
<ul>
<li>즉, $adjA\over detA$ = $A^{-1}$</li>
</ul>
<br>

<h4 id="증명">증명</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/8eafce13-2285-4fdf-b6c9-4c73e3790940/image.png" alt=""></p>
<h4 id="특징">특징</h4>
<ul>
<li>$AB = I$ 이면, $BA = I$도 성립한다. </li>
</ul>
<br>
<br>

<h3 id="--크래머-공식">- 크래머 공식</h3>
<p>: $X = A^{-1}B$일 때, X행렬의 특정원소를 알고 싶을 때 사용하는 공식</p>
<ul>
<li>식을 보면 원하는 열에 대해서만 $a_{12}$ -&gt;$b_{2}$ 이렇게 교체되어있는 것을 확인할 수 있다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/1d40183d-662d-4001-91ae-6959094b0cf1/image.png" alt=""></p>
<h4 id="증명-1">증명</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/2c9e28b2-9e92-4f9d-80f9-4ee81b1f4e0f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[VQA 개념 톺아보기]]></title>
            <link>https://velog.io/@for1overson1y_/VQA-%EA%B0%9C%EB%85%90-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@for1overson1y_/VQA-%EA%B0%9C%EB%85%90-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Sat, 08 Jul 2023 07:42:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>VQA란? 
Visual Question Answering의 줄임말로 AI가 이미지를 인식, 인식한 이미지를 바탕으로 이미지에 대한 질문을 했을 때 답을 해줄 수 있는 것을 말한다. </p>
</blockquote>
<br>

<h2 id="1-개념">1. 개념</h2>
<p>모델이 이미지를 인식하고 질문의 의도를 이해해야하는 등 인간이 해야 하는 복잡한 사고를 해야한다. 이 task를 처리하기 위해서 AI는 이미지 캡셔닝을 잘하는 것보단 더 많은 능력을 필요로 한다. 다음과 같은 능력을 요구한다고 한다.
<br></p>
<ul>
<li>세밀한 인식<em>(이 이미지에서 서로다른 강아지 종은 몇개인가??)</em></li>
<li>물체 감지<em>(얼마나 많은 나무가 있는가?)</em></li>
<li>행동 인식<em>(여자는 웃고 있는가?)</em></li>
<li>지식기반 추론<em>(이것은 채식주의자를 위한 피자인가?)</em></li>
<li>상식 추론<em>( 사람은 1.0/1.0 시력을 갖고 있는가?)</em></li>
</ul>
<br>
또한 VQA에서 Q(Question)의 형태는 크게 두가지이다.

<ul>
<li>open-ended : 열린 질문(질문의 형태가 ~?로 다양)</li>
<li>multiple-choice : 다지선다형</li>
</ul>
<br>
<br>


<h2 id="2-데이터셋-예시">2. 데이터셋 예시</h2>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/3f3e4768-66d9-46bf-b2d1-f3101358dcb7/image.png" alt=""></p>
<p>5개의 한 문장짜리 캡션, 흥미로운 질문 등이 이미지와 함께 제공되어야 한다.
흥미로운 질문으로는 <em>저 고양이의 색깔이 무엇인가</em>? 말고 _사진의 저 동물은 어떤 소리를 낼 것 같은가?_와 같은 구체적이고 AI의 상상력을 요구하는?질문이어야 한다. 
<br>
<br></p>
<h2 id="3-answer평가">3. answer평가</h2>
<h3 id="1-open-ended">1) open-ended</h3>
<p>저 사진의 색깔은 오렌지인가?는 yes/no로 판단할 수 있지만 open-ended의 경우 <em>하얀색이다. 울고있다.</em> 등의 답변이 필요한 경우도 있다. 이 답변이 정답인지 아닌지 알기 위해서는 다음 공식을 사용한다. 
분모가 3이란 뜻은 적어도 3명과 답이 일치하면 정답으로 간주한다는 뜻이다. 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/26663153-73ee-4a3b-879b-8d910b8532f2/image.png" alt=""></p>
<br>

<h3 id="2-multi_choice">2) multi_choice</h3>
<p>선지는 4종류이며 18개의 선택지로 구성된다. </p>
<ul>
<li>correct : 정답</li>
<li>plausible : 맞긴 하지만 이미지와는 안맞음</li>
<li>popular : yes, no, 2, 1등 자주 등장하는 선지</li>
<li>random : 위의 세개 선지들이 먼저 생성되고 18개의 선지를 구성할 때까지 그냥 랜덤하게 위 셋 중에서 뽑아 만드는 나머지 선지
<img src="https://velog.velcdn.com/images/for1overson1y_/post/4ecef73b-7bb1-44d7-8ef6-b0c5963edc4f/image.png" alt=""><br>
<br>

</li>
</ul>
<h2 id="4-특징">4. 특징</h2>
<ol>
<li>yes/no로 대답할 수 있는 질문에는 &quot;Is the ...&quot; , &quot;Are ...&quot;, &quot;Does ..&quot; 같은 형태가 많다.</li>
<li>다양한 답변이 나올 수 있는 질문에는 &quot;What is ...&quot;, &quot;What type...&quot; 같은 질문이 많다.</li>
<li>답변에는 yes/no, 색깔, left/right 등의 답변이 많다.</li>
<li>1단어 : 90%, 2단어 : 6%, 3단어 : 2.5% 정도로 답변 구성을 차지한다. <br>
<br>

</li>
</ol>
<h2 id="5-baseline">5. baseline</h2>
<p>우리가 머신러닝을 할 때 나이브베이즈 룰을 사용하는 것처럼 VQA모델이 최소한 넘어야 하는 기준이 존재하는데 이를 baseline이라고 한다. baseline을 구하는 방법?은 다음과 같다. </p>
<ul>
<li>random: 무작위로 답변을 선택한다.</li>
<li>prior(“yes”): “yes” 답변이 가장 많기 때문에 항상 yes를 답으로 내놓는다.</li>
<li>per Q-type prior: 각 질문 종류별로 답변 중 최빈값을 답으로 내놓는다.</li>
<li>nearest neighbor: 가장 유사한 K개의 질문을 뽑아 그 답변들 중 최빈값을 답으로 내놓는다.<br>
<br>

</li>
</ul>
<h2 id="6-구현">6. 구현</h2>
<h3 id="step-1-image-channel">step 1) image Channel</h3>
<p>이미지를 위한 embedding 을 제공한다. 보통 두가지를 사용해서 임베딩 값을 구한다. </p>
<ul>
<li>L : CNN인 VGGnet에 이미지 입력, 이 net의 마지막 hidden layer의 크기인 4096차원의 output이 embedding으로 사용된다. </li>
<li>norm L : 위와 비슷하지만 l_2정규화된 활성함수를 사용한다. </li>
</ul>
<br>

<h3 id="step-2-question-channel">step 2) Question Channel</h3>
<p>질문을 위한 embedding을 제공한다. </p>
<ul>
<li>Bag-of-Words Question(BoW Q): 질문의 최빈 1000개의 단어와 30차원의 BoW를 사용하여 1030차원의 질문 embedding을 만든다.</li>
<li>LSTM Q: 1024차원이다.</li>
<li>deeper LSTM Q: 2048차원이다</li>
</ul>
<br>

<h3 id="step-3-multi-layer-perceptronmlp">step 3) Multi-Layer Perceptron(MLP)</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/6b9983b4-bb10-4951-9612-53880347b29f/image.png" alt=""></p>
<ul>
<li>BoW Q + I에 대해서는 단지 합친다.</li>
<li>LSTM Q + I, deeper LSTM Q + norm I에 대해서는 이미지 embedding은 차원을 맞추기 위해 1024차원으로 변환된 후 LSTM embedding과 element-wise하게 곱해진다.</li>
</ul>
<br>
<br>

<h2 id="etc-더-알아볼-점">etc. 더 알아볼 점</h2>
<p>음 우선 VQA의 개념이 뭔지, 어떻게 데이터셋을 구하고 어떤 방식으로 모델 성능평가를 하는지 대충 감이 온다. 그러나 method 관련 부분을 더 심도깊게 다뤄야 할 필요가 있을 것 같고, 멀티모달도 같이 공부를 해야할 것 같다. 더불어 데이터셋을 내가 직접 구축한다면 어떻게 라벨링할 것인지, 다른 데이터셋은 어떻게 라벨링 했는지도 확인해야 할 것 같고 baseline도 뭘 쓸 건지 고민해보면 좋을 것 같다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DNN과 CNN]]></title>
            <link>https://velog.io/@for1overson1y_/DNN%EA%B3%BC-CNN</link>
            <guid>https://velog.io/@for1overson1y_/DNN%EA%B3%BC-CNN</guid>
            <pubDate>Fri, 26 May 2023 02:18:56 GMT</pubDate>
            <description><![CDATA[<p>인공지능과 딥러닝은 인간의 신경망을 본따 만들었다. 그러나 처음에 OR과 AND문제를 풀 수 있던 인공신경망은 아주 간단한 XOR도 풀 수 없다는 것에 암흑기가 잠깐 찾아왔으나, 이는 차원을 변경하면 풀 수 있음을 알게 되어 다시 인공신경망이 발전하기 시작했다! </p>
<p>그러면, 차원은 어떻게 증가하는가, 그건 층(layer)을 겹겹이 쌓으면 된다!
층을 쌓는 것에서 ANN, DNN, CNN이 발전하였다. </p>
<p><br/><br/></p>
<h2 id="용어-정리">용어 정리</h2>
<p><strong>인공지능(Artificial Intelligence)</strong> :  인간의 지능이 갖고 있는 기능을 갖춘 컴퓨터 시스템을 뜻하며, 인간의 지능을 기계 등에 인공적으로 구현한 것을 말함. </p>
<p><strong>머신러닝(Machine Learning)</strong> : 혹은 기계학습은 인공지능의 한 분야로, 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야</p>
<p><strong>딥러닝(Deep Learning)</strong> : 여러 비선형 변환기법의 조합을 통해 높은 수준의 추상화(다량의 복잡한 자료들에서 핵심적인 내용만 추려내는 작업)을 시도하는 기계학습 알고리즘의 집합을 뜻함.</p>
<p><br/><br/></p>
<h2 id="dnn">DNN</h2>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/442f3f6a-c9f8-43d8-88f0-edac6ae028e1/image.png" alt=""></p>
<p>사람의 신경망을 본따 만든 것은 기존 ANN과 똑같다. input과 output을 비교해 얼마나 성능이 좋은지 점수를 매기는 것도 똑같다. 다른 점은 은닉층을 더 깊게 쌓았다는 것이다. output이 나오면 output과 실제레이블을 비교해 loss(오차)를 계산하고 미분을 통해 loss로 새로계산한 가중치(<em>그래디언트 descent라고 부른다</em>)를 backward한다. 그렇게 해서 input에 적용될 weight(가중치)를 업데이트한다. 이 dnn에서 더 나아가서 나타난 것이 cnn, rnn, LSTM등이다. </p>
<h2 id="cnn합성곱-신경망">CNN(합성곱 신경망)</h2>
<p>CNN은 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조다. DNN에서 1차원 input만 처리할 수 있는 단점을 보완하였다. 이 CNN 알고리즘은 Convolution과정과 Pooling과정을 통해 진행된다. Convolution Layer와 Pooling Layer를 복합적으로 구성하여 알고리즘을 만든다.
<img src="https://velog.velcdn.com/images/for1overson1y_/post/0f8101f1-8d2b-4c87-9f77-f39895454aaa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/3af1a8d8-bbee-48e7-9f68-ba88a3a1eec6/image.png" alt=""></p>
<p>용어를 정리해보자면,</p>
<h3 id="convolution과정">convolution과정</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/4746cb3c-3048-493e-9c43-1d2821e3808a/image.png" alt=""></p>
<p>합성곱이라고도 부른다. 이미지의 작은 부분의 특징을 추출하기 위해 이미지의 크기보다 작은 filter를 적용, filter와 각 부분의 값과 곱해서 하나의 출력값을 만든다. 이미지를 보면 이해가 쉽다. $W_n$과 $X_n$을 각각 곱한뒤 평균을 내거나, 합쳐서 output부분의 $Y_1$이 된다. 이 과정을 convolution이라고 하며 이는 파라미터 수를 줄여주는 역할을 한다. 압축과정이라고 생각하면 편하다.</p>
<h3 id="pooling">pooling</h3>
<p>위의 사진만 봐도 알 수 있다. 3x3이미지에 2x2사진을 적용하니 이미지 크기가 2x2가 되었다. 이렇게 이미지의 크기를 줄이는 과정을 pooling이라고 한다. 연산을 가볍게 가져가기 위한 기법이다. </p>
<h3 id="padding">padding</h3>
<p>이미지가 위 사진처럼 2x2로 출력되었다고 보자. 이 이미지 크기도 충분히 작은데 cnn은 dnn처럼 layer를 여러개 가져간다. 또 filter를 적용하면 크기가 또 작아진다. 그러면 분실되는 정보량이 너무 많아진다. 그래서 너무 작아지지 않기 위해 0으로 주변 이미지를 둘러주는데 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/bb33d2cc-a46e-449c-a030-56fce90c03e2/image.png" alt="">
이를 padding이라고 한다. </p>
<h3 id="relu활성화함수">ReLU(활성화함수)</h3>
<p>relu는 다들 알 것이라고 생각한다. 선형계층을 여러개 쌓을 때 단순하게 여러개 쌓으면 최종적으로는 하나의 선형레이어를 반환하여 그동안 쌓은 layer의 의미가 퇴색되기 때문에 비선형성을 추가해주어야 하는데 그 역할을 하는게 ReLU와 같은 활성화함수라는 것을. </p>
<p>cnn에서도 동일하다 전의 conv layer에서 다음 conv layer로 이동하기 전에 선형결과를 비선형(있다 없다 같은,)결과로 바꿔주어야 하는데 그 역할을 하는 함수이다. </p>
<h3 id="fully-connected-layer">fully connected layer</h3>
<p>최종 결과를 반환하기 위한 layer이다. CNN 마지막에서 분류(Classification)를 결정하는 단계이다. 이를 위해 DNN처럼 flatten을 해주어야 한다.</p>
<ol>
<li><p>flatten : 각 레이어를 1차원 벡터로 변환</p>
</li>
<li><p>fully-conneced layer : 1차원 벡터로 변환된 레이어를 하나의 벡터로 연결 (각 층의 노드들은 하나로 연결)</p>
</li>
<li><p>그 후 softmax를 적용해 클래스를 정의 
<img src="https://velog.velcdn.com/images/for1overson1y_/post/a030f0cd-7ad3-44cd-91d0-4d93733ad5b7/image.png" alt=""></p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[VGGNet16 논문리뷰]]></title>
            <link>https://velog.io/@for1overson1y_/VGGNet16</link>
            <guid>https://velog.io/@for1overson1y_/VGGNet16</guid>
            <pubDate>Fri, 19 May 2023 05:13:06 GMT</pubDate>
            <description><![CDATA[<h2 id="0-목차">0. 목차</h2>
<ol>
<li>모델 개요</li>
<li>모델 구조</li>
<li>모델의 장점과 단점</li>
<li>코드 리뷰<br/>
<br/>
## 1. 모델 개요
cnn의 깊이가 깊어지면 어떤일이 발생하는지를 중점으로 모델을 쌓았다. 3x3의 아주 작은 conv layer을 사용하였고 이 conv layer가 16층, 19층을 쌓으면 좋은 성능을 낼 수 있다고 생각하였고 이를 구현한 모델이다. 16층이나 19층처럼 층을 깊게 쌓으면 모든 데이터셋에 어느정도 일반화할 수 있는 성능을 가진다고 판단해 현재까지도 backbone으로 많이 사용된다. 
<br/><br/>

</li>
</ol>
<h2 id="2-모델-구조">2. 모델 구조</h2>
<ul>
<li>13개의 conv layer + 3개의 FC layer</li>
<li>3x3 conv filters</li>
<li>1x1 strides</li>
<li>1x1 padding</li>
<li>2x2 max pooling(strides 2)</li>
<li>activation : ReLU</li>
<li>전처리는 오직 trainset의 RGB값을 빼기만 하였다. <br/>

</li>
</ul>
<h4 id="왜-3x3을-했는가">왜 3x3을 했는가?</h4>
<ul>
<li>3x3을 2번 conv하는 것과 5x5로 1번 conv하는 건 동일 feature map을 반환한다.</li>
<li>채널 수를 C라고 가정했을 때, VGGNet에서 3 × 3 필터를 사용한 이유는, 3 × 3 필터 3개를 쌓았을 경우에 총 27×C^2개의 가중치 파라미터를 갖고, 7 × 7 의 필터를 사용할 경우에 49×C^2의 가중치 파라미터 개수를 갖는다. 즉 연산량을 줄일 수 있다.</li>
<li>1개의 큰 필터 레이어를 거치는 것보다, 3개의 작은 필터를 거치면서 ‘비선형성’을 증가시킬 수 있다
<img src="https://velog.velcdn.com/images/for1overson1y_/post/d73b61d5-75b0-4d9f-b415-1b36eec9ab5f/image.png" alt=""></li>
</ul>
<h4 id="vggnet16의-conv-map은-빨간색-박스를-확인하면-된다">VGGNet16의 conv map은 빨간색 박스를 확인하면 된다.</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/62701467-cb25-4aab-ac85-a06ff50aefb0/image.png" alt=""></p>
<p><br/><br/></p>
<h2 id="3-모델-장단점">3. 모델 장단점</h2>
<table>
<thead>
<tr>
<th align="center">장점</th>
<th align="center">단점</th>
</tr>
</thead>
<tbody><tr>
<td align="center">시간 단축이 가능하다</td>
<td align="center">파라미터수가 많다</td>
</tr>
</tbody></table>
<p><br/><br/></p>
<h2 id="4-코드-리뷰">4. 코드 리뷰</h2>
<p><a href="https://periodic-move-af0.notion.site/VGGNet-9f14b30910cf43baab8d8156c5af277f">개인노션 VGGNet 코드 리뷰 파이토치</a></p>
<p>아래는 vggnet16의 텐서플로 코드이다. 다음과 같은 사항을 확인하면 좋을 듯 하다.</p>
<ol>
<li>모델 구조는 하단 빨간 박스를 참고하였다.</li>
<li>VGGNet에서 maxpooling의 사이즈와 stride는 2x2로 정해져있다.</li>
<li>모든 VGGNet에서 fclayer의 구조는 정해져있다. </li>
</ol>
<ul>
<li>maxpool - 4096size의 fc layer두개 - 1000size의 softmax</li>
<li>1000size는 임의로 정한 것이며 이정도 사이즈면 특징을 잘 처리할 수 있을 것이라 기대하고 넣은 값이다. </li>
</ul>
<ol start="4">
<li>모든 cnn이 그렇듯 fc layer에 넣기 전에 flatten을 해야 한다. </li>
<li>dropout은 train할 때는 0.5, test할 때는 1로 변경해야 한다. </li>
<li>optimizer는 Adam을 썼으며 loss는 구별할 게 여러개이므로 categorical_crossentropy를 사용하였다. </li>
</ol>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/77ae527d-4350-49cd-b4f8-e33faaf049c1/image.png" alt=""></p>
<pre><code>class VGG16(Sequential):
    def __init__(self, input_shape):
        super().__init__()

        self.add(Conv2D(64, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;, input_shape=input_shape))
        self.add(Conv2D(64, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))

        self.add(Conv2D(128, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(128, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(MaxPooling2D(pool_size=(2,2), strides= (2,2)))


        self.add(Conv2D(256, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(256, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(256, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))

        self.add(Conv2D(512, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(512, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(512, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))

        self.add(Conv2D(512, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(512, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(Conv2D(512, kernel_size=(3,3), padding=&#39;same&#39;,
                        activation=&#39;relu&#39;))
        self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))

        self.add(Flatten())
        self.add(Dense(4096, activation=&#39;relu&#39;))
        self.add(Dropout(0.5))
        self.add(Dense(4096, activation=&#39;relu&#39;))
        self.add(Dropout(0.5))
        self.add(Dense(1000, activation=&#39;softmax&#39;))

        self.compile(optimizer=tf.keras.optimizers.Adam(0.003),
                     loss=&#39;categorical_crossentropy&#39;,
                     metrics=[&#39;accuracy&#39;])</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[ResNet50 논문 리뷰]]></title>
            <link>https://velog.io/@for1overson1y_/ResNet50</link>
            <guid>https://velog.io/@for1overson1y_/ResNet50</guid>
            <pubDate>Fri, 19 May 2023 04:53:31 GMT</pubDate>
            <description><![CDATA[<h2 id="0-목차">0. 목차</h2>
<ol>
<li>모델 개요</li>
<li>모델 구조</li>
<li>모델의 장점과 단점</li>
<li>코드 리뷰</li>
</ol>
<br/>
<br/>

<h2 id="1-모델-개요">1. 모델 개요</h2>
<ul>
<li>마이크로 소프트에서 개발</li>
<li>앞선 신경망들은 레이어를 많이 쌓아 신경망의 depth를 깊게 가져갔으나 오히려 그래디언트 소실 문제 때문에 성능이 어느순간 나빠지는 것을 발견함</li>
<li>이 문제를 해결하기 위해 레지듀얼 블록을 도임함. (숏컷 도입)</li>
<li>숏컷이란?<ul>
<li>저 아이덴티티가 숏컷임.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/d7e78bb1-714a-4856-9f70-b10c8da206b3/image.png" alt=""></p>
<br/>
<br/>

<h2 id="2-모델-구조">2. 모델 구조</h2>
<h3 id="숏컷">숏컷</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/b1e4900b-c2ba-42af-94ae-67f1b854c3db/image.png" alt=""></p>
<ul>
<li>input은 x, output은 relu(F(x) + x )임<ul>
<li>relu함수를 사용해 결과값 출력하는 건 기존 googlenet과 동일</li>
<li>다만, 숏컷(아이덴티티 매핑)을 이용해 입력값을 출력값에 한번 더 더해주고 있음</li>
<li>이는 기울기가 깊어질 수록 vanishing gradient 문제가 발생하는 것을 해결하기 위한 것이므로 레이어들이 많아지면서 입력값이 점점 잊혀져가는 것을 해결하기 위함임.<br/></li>
</ul>
</li>
<li>왜 그렇게 하는가?<ul>
<li>기존 신경망은 H(x) - y로 loss를 계산.</li>
<li>loss는 최소화되는 것이 좋으므로 결국 H(x) - y = 0을 목표로 하고 학습</li>
<li>그러나 resnet은 H(x) - x = 0을 목표로 함</li>
<li>이렇게 되면 위 사진의 식과 같이 H(x) = F(x) + x → H(x) - x = F(x)가 목표</li>
<li>그러면 F(x) = 0이 최종 목표 → 학습이 더 쉬워짐</li>
</ul>
</li>
</ul>
<br/>
<br/>

<h3 id="레지듀얼-블록">레지듀얼 블록</h3>
<ul>
<li>resnet에서 사용되는 가장 기본적인 블록은 residual block임</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/33fd7bbc-7049-4eda-a032-02a5b7196b0b/image.png" alt="">
<img src="https://velog.velcdn.com/images/for1overson1y_/post/f40ce00f-4bb8-4979-a173-19d05fcd2126/image.png" alt=""></p>
<ul>
<li><p>3개의 레이어 스택으로 구성됨</p>
<ul>
<li>1x1, 3x3, conv layer<br/>
</li>
</ul>
</li>
<li><p>왜 그렇게 하는가</p>
<ul>
<li>기존(좌측 사진)을 보면, 3x3이 두번 있음 → 연산 많음</li>
<li>그러나 1x1을 두번 쓴 (오른쪽) 레지듀얼 블록은 파라미터 수가 감소, 연산량이 줄어짐 근데 연산량은 주는 데 레이어는 더 많아짐 → 정확도 증가<br/>
</li>
</ul>
</li>
<li><p>1x1 layer(1x1, 64 부분)</p>
<ul>
<li><p>in_channel수를 가진 데이터가 들어와 conv1x1을 거치면 out_channel채널 개수를 띄도록 구성함.</p>
</li>
<li><p>이 1x1이 채널 수를 조절하면서 차원을 줄였다 늘리는 것이 가능</p>
<pre><code class="language-python">conv2d(in_channel, out_channel..) 
batchnorm2d()
relu()&lt;&lt; 이렇게 구성!</code></pre>
</li>
<li><p>일반적인 conv layer 형태를 띰</p>
</li>
<li><p>합성곱층 - 배치정규화 - 렐루 활성화함수를 거칩니다.</p>
<br/>
</li>
</ul>
</li>
<li><p>3x3 layer(3x3, 64부분)</p>
<ul>
<li>conv 1x1과 동일한 흐름으로 진행되나, filter(커널 사이즈)를 1 → 3으로 바꿔주기만 함.</li>
<li>순서는 conv2d → batchnorm2d → relu동일<br/>
</li>
</ul>
</li>
<li><p>마지막 세번째  conv layer(1x1, 256)</p>
<ul>
<li>256d가 입력으로 들어오고 1x1합성곱층으로 아까 채널 수를 늘였다 줄였다 가능하다고 했는데 입력크기를 다시 반환</li>
<li>근데 resnet에는 아이덴티티 매핑이 있어 다시 x가 F(x)에 합쳐지므로 input x와 F(x)가 같은 채널을 가져야 함. 그래서 입력을 출력에 맞춰 차원을 변경함. 만약 아래처럼 아이덴티티 매핑이 이뤄지고 출력이 이뤄지면 채널이 같아지게끔하는 convolution layer를 하나 더 준비해야하고,</li>
<li>그렇지 않다면 추가적인 conv layer를 준비할 필요가 없음</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/afabf005-4f0f-48d9-b449-03d4029ca74d/image.png" alt=""></p>
<ul>
<li>그러면 경우의 수가 두개인데 따로따로 resnet layer를 쌓아야 하나요? if를 계속 쓰면서요?<ul>
<li>아니요. 그렇진 않습니다.</li>
<li>다만, 실제 구현되는 forward함수에서 downsampling(말그대로 데이터 줄이는 과정 풀링이 대표적 방법임)을 실행하는데 이때 각 경우마다 다른 레이어를 반환함</li>
</ul>
</li>
</ul>
<p><br/><br/></p>
<h3 id="전체-구조초록색-부분">전체 구조(초록색 부분)</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/dd67fe01-be56-4dd0-bf04-09bd352783aa/image.png" alt=""></p>
<ul>
<li>50개의 layer를 가지고 있어서 resnet50입니다.</li>
<li>layer name칼럼 원소에 따라 []로 구분되는 하나하나가 residual block입니다.</li>
<li>즉, resnet50은 각 layer마다 다른 residual block형태가 반복되는 구조입니다.</li>
<li>layer는 총 5개입니다.<ul>
<li>7x7 64 stride 2 + 3x3 max pool</li>
<li>conv2_x 레이어 (1x1 → 3x3 → 1x1, 64channel)</li>
<li>conv3_x 레이어(1x1 → 3x3 → 1x1, 128channel)</li>
<li>conv4_x 레이어(1x1 → 3x3 → 1x1, 256channel)</li>
<li>conv5_x 레이어(1x1 → 3x3 → 1x1, 512channel)<br/>
<br/>

</li>
</ul>
</li>
</ul>
<h2 id="3-모델-장단점">3. 모델 장단점</h2>
<table>
<thead>
<tr>
<th align="center"><strong>장점</strong></th>
<th align="center"><strong>단점</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="center">기울기 소실 문제 해결</td>
<td align="center">그래도 깊이가 낮지는 않기 때문에 높은 연산량, 메모리 사용량을 가짐</td>
</tr>
<tr>
<td align="center">레이어를 깊게 쌓지 않아도 됨</td>
<td align="center">작은 데이터셋에서는 과적합이 발생할 수 있음</td>
</tr>
<tr>
<td align="center">레이어를 깊게 쌓지 않아도 됨</td>
<td align="center">구현이 어려움(← 이건 pretrained된 모델이 존재함)</td>
</tr>
</tbody></table>
<p><br/><br/></p>
<h2 id="4-코드-리뷰">4. 코드 리뷰</h2>
<p><a href="https://periodic-move-af0.notion.site/resnet50-bc9e06c532b24227b801560dbba9b1e1">개인노션_resnet50 파이토치 구현</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[attention 논문리뷰]]></title>
            <link>https://velog.io/@for1overson1y_/attention-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@for1overson1y_/attention-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Fri, 19 May 2023 02:24:36 GMT</pubDate>
            <description><![CDATA[<h2 id="0-목차">0. 목차</h2>
<ol>
<li>모델 개요</li>
<li>모델 구조</li>
<li>모델의 장점과 단점</li>
<li>코드 리뷰<br/>
<br/>
## 1. 모델 개요
transformer의 시초가 된 논문이다. 특히 자연어처리에 자주 쓰인다. 기존 LSTM등 시계열 모델에서 자연어처리를 하려면 인코더-디코더의 복잡한 모델구조와 함께 단어 하나씩 순차적으로 연산해야 했으므로 이는 연산량과 시간이 매우 오래걸린다는 단점이 있다. 그러나 transformer은 attention의 개념을 도입해 RNN과 같은 모듈을 쓰지 않고 하나의 문장 전체를 입력으로 받아(기존에는 단어를 토큰으로 나누어 input으로 집어넣었다.) 한꺼번에 병렬적으로 처리할 수 있게끔 하였다. 즉, 다시말하면 GPU를 효과적으로 사용할 수 있다는 뜻이다. 

</li>
</ol>
<br/>

<h3 id="1-1-s2s와의-비교">1-1. S2S와의 비교</h3>
<p>시퀀스 투 시퀀스가 성능이 좋은 RNN계열 모델이었으므로 이와 비교가 된다. 간단히 S2S의 모델의 구조와 그 한계점을 살펴보면 다음과 같다.
<img src="https://velog.velcdn.com/images/for1overson1y_/post/9a05e421-a2bd-4e48-8721-7e006835e6df/image.png" alt=""></p>
<ul>
<li>토큰을 나누고 토큰 개수만큼 layer를 지나야 한다. 각 layer에서 나온 출력은 기존 RNN처럼 다음 입력을 들어가게 된다. </li>
<li>그리고 이를 모아서 고정된 크기의 context vector를 반환하는 것을 볼 수 있는데 앞선 모든 토큰의 정보를 포함하고 있으므로 이 정보가 한데 뭉쳐있기 때문에 decoding시에 개별 토큰과의 관계파악이 어렵다. </li>
<li>그리고 순차적으로 정보가 입력되므로 시퀀스가 길어질수록 기울기 소실 문제가 발생한다. <br/>

</li>
</ul>
<p><strong>개선점</strong>
그러나 attention만을 사용한 transformer는 이런 S2S의 문제를 개선하였다. 우선, 제일 큰 점은 순차적으로 입력하지 않아도 되고 병렬 처리가 가능해 성능이 크게 향상되었다는 점이다. 
<br/></p>
<h3 id="1-2-attention-개념">1-2. attention 개념</h3>
<p>attention에는 주로 addictive와 dot이 있는데 본 모델에서는 후자를 사용하였다. 왜냐하면 행렬곱셈 구현이 최적화가 잘되어있어 공간을 많이 절약할 수 있고 계산이 빠르기 때문이다. 그러나 Q와K의 차원이 커질수록 학습이 정상진행되지 않는데 이를 위해 d_k로 스케일조정을 해주는 것이다. </p>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/fa14dfd7-14d8-4146-99dd-bdc9b68d658a/image.png" alt=""></p>
<ul>
<li>Q : 쿼리</li>
<li>K : 키</li>
<li>V : 밸류</li>
</ul>
<p>attention이 최종으로 구하는 값은 Q가 가져야할 값이다. K-V는 세트라고 생각하면 편하다. Q가 가져야 할 값을 어떻게 구하게 되냐면 Q와 K의 비교를 통해 구하게 된다. 그러면 K와 V는 세트이므로 K와 Q가 비슷하다면 K의 V를 반환하게 되는 것이다. 둘의 비교는 행렬곱을 통해 비교하게 된다. <em>softmax의 (QKt)부분</em> 이를 d_k로 나눠주는 것은 스케일을 조정해주는 것이다. 이를 attention으로 Energy를 구한다고 하는데 Energy는 softmax() 안에서 계산되어 들어간 Q가 모든 K와 어느정도 유사한지의 비율을 반환하게 된다. 마지막으로 Key의 Value값을 곱해 줌으로써, 최종적으로 Query가 가져야 하는 값을 구할 수 있게 된다. </p>
<br/>
<br/>

<h2 id="2-모델-구조">2. 모델 구조</h2>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/26554c83-b38c-4303-b10f-8c7b2878e18e/image.png" alt=""></p>
<p>위는 attention을 이용한 transformer의 모델 구조이다. 찬찬히 살펴보도록 하자.</p>
<h3 id="0-multi-head-attention">0) multi head attention</h3>
<h4 id="in-encoder">in encoder</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/f4cf9453-70d4-47a1-8428-ad5bfee5b80e/image.png" alt="">
<img src="https://velog.velcdn.com/images/for1overson1y_/post/67c89d8e-8150-4f96-8617-52bd02275efc/image.png" alt=""></p>
<p>간단히 설명하자면 self-attention을 여러 head에서 실행한 후 concat(합치기)을 한다는 뜻이다. 이 모든 attention에서의 출력을 concat한 뒤에는 linear function을통해 매핑한다. cnn에서 여러개의 필터를 통해서 convolution output을 구하는 것과 비슷하다. </p>
<br/>
<br/>

<p><strong>프로세스</strong></p>
<ul>
<li><p>입력값이 들어오면 V,K,Q가 복제된다. 그 후 그림과 같이 linear layer에서 차원이 변환되는데 임베딩 차원을 V,K,Q의 차원으로 변환한다. <em>모델 차원과 별개로 K,V,Q의 차원을 각각 결정할 수 있다. 어차피 추후 concat하기 때문에 입출력의 dimension은 같아진다.</em></p>
</li>
<li><p>그 후 앞서 attention의 프로세스에서 확인했던 것처럼 행렬곱을 수행한다.</p>
</li>
<li><p>linear를 거쳐 output을 최종생산한다. </p>
</li>
<li><p>최종적으로 어떤 한 단어(awesome)이 모든 단어(AI, is, awesome)들 중 어떤 단어들과 correlation이 높고, 또 어떤 단어와는 낮은지를 배우게 된다.</p>
<br/>
#### in decoder</li>
<li><p>마스킹 실행</p>
</li>
<li><p>단어 간의 correlation확률을 뱉어내는 목표는 같다. </p>
</li>
<li><p>다만, AR(p)를 보존해야되기 때문에 <em>현재 값에 직접적인 영향을 주는 time series</em> 제한된 벡터만을 참조한다.</p>
<br/>
#### in encoder-decoder</li>
<li><p>decoder의 sequence vector들이 encoder의 sequence vector들과 어떠한 correlation을 가지는지를 학습한다.</p>
</li>
<li><p>이를 위해 Q,K,V 중 일부는 다른곳에서 가져온다. </p>
<br/>
<br/>
### 1) encoder
![](https://velog.velcdn.com/images/for1overson1y_/post/af61b406-178d-4ff4-b307-948eba505932/image.png)
</li>
<li><p>6개의 동일한 층으로 구성되어 있다. 여느 RNN처럼 처음 input이 첫번째 층에 들어가고 그 다음층엔 이전층의 output이 들어가는 형태이다.</p>
</li>
<li><p>이 6개의 각 층에는 2개의 sub-layer가 있다. 하나는 multi head attention이고 두번째는 단순히 완전 연결된 feed-forward이다.</p>
</li>
<li><p>이 2개의 sub layer에는 병목처리(residual connection)을 실행한다. <em>resnet에서 봤던 그 숏컷</em> 그리고 layer normalize를 수행한다.</p>
</li>
<li><p>각 sub layer의 출력은 x+sublayer(x)를 normalize한 것이다. residual connection을 용이하게 하기 위해 dim은 512로 설정하였다.</p>
</li>
</ul>
<br/>

<h4 id="1-positional-encoding">(1) positional Encoding</h4>
<ul>
<li>RNN을 사용하지 않는 대신 문장 내 포함된 단어들의 위치 정보를 인코딩한다.</li>
<li>이때 위치정보는 그 전 layer의 모든 위치정보를 참고한다.</li>
<li>해당 위치정보와 모든 위치정보간의 상관관계에 대한 정보를 더해준다.</li>
<li>input 임베딩과 동일한 dimension으로 합쳐진다.</li>
<li>쿼리, 키, 밸류 값으로 각각 복제돼 입력된다.</li>
</ul>
<br/>

<h4 id="3-feed-forward">(3) feed forward</h4>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/8fa069b5-c909-49f9-8969-d60ea511c73c/image.png" alt=""></p>
<ul>
<li>입력벡터 x에 linear 변환을 거친 뒤 ReLU함수를 적용하고 그 후 또 다시 linear변환 적용</li>
<li>그니까 x -&gt; linear transform -&gt; ReLU -&gt; linear transform을 적용</li>
<li>max함수는 ReLU활성화함수를 사용하기 위해 사용한다.</li>
<li>인코더 디코더 모두 이 network를 가지고 있다.</li>
<li>각 단어마다 feed forward를 적용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/560f0148-351b-42cf-aa9f-a4587a3e916b/image.png" alt=""></p>
<br/>

<h3 id="2-decoder">2) decoder</h3>
<p><img src="https://velog.velcdn.com/images/for1overson1y_/post/06f49b7d-8601-40c3-b79d-057d28411d3c/image.png" alt=""></p>
<p>이전 디코더 레이어의 출력을 입력으로 받는다. 다만 인코더와는 다르게 masking을 수행하는데 이를 하는 이유는 특정 단어 이후의 단어들을 참조하지 못하게끔하기 위해서이다. 왜냐하면 RNN과 달리 한꺼번에 문장 데이터가 입력이 되기 때문에 순차적으로 단어를 잊어가는 RNN과 달라서 마스킹이 필요하다. </p>
<ul>
<li>인코더와 같이 6개의 층으로 구성되어있다.</li>
<li>2개의 sub layer가 아닌 3개로 이루어져 있다. multi head attention이 그 세번째이다.</li>
<li>이 부분은 인코더-디코더 부분인데 추후 다루도록 하겠다.</li>
<li>디코더는 병렬처리하던 encoder와 달리 순차적 결과를 만들어야 하므로 masking을 진행한다. <br/>
### 3) encoder-decoder attention
![](https://velog.velcdn.com/images/for1overson1y_/post/8e7d7ef9-8d19-4064-b408-45621af7b988/image.png)

</li>
</ul>
<p>decoder의 이부분을 뜻한다. Q는 이전 디코더 레이어의 출력값이고 K와 V는 인코더의 출력값을 사용한다. 결론적으로 디코더가 출력문장을 생성할 때, 입력문장의 모든 위치의 단어들을 참조할 수 있게 된다. 
<br/>
<br/></p>
<h2 id="3-모델의-장점과-단점">3. 모델의 장점과 단점</h2>
<table>
<thead>
<tr>
<th align="left">장점</th>
<th align="center">단점</th>
</tr>
</thead>
<tbody><tr>
<td align="left">기울기 소실 해결</td>
<td align="center"></td>
</tr>
<tr>
<td align="left">긴 문장을 넣을 수 있음</td>
<td align="center"></td>
</tr>
<tr>
<td align="left">계산능력 향상</td>
<td align="center"></td>
</tr>
<tr>
<td align="left">각 Layer당 계산 복잡도의 감소</td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><br/></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><br/></td>
<td align="center"></td>
</tr>
</tbody></table>
<h2 id="4-코드-리뷰">4. 코드 리뷰</h2>
<h2 id="5-출처">5. 출처</h2>
<p>[[논문리뷰] Attention is All you need(<a href="https://aistudy9314.tistory.com/63">https://aistudy9314.tistory.com/63</a>)
<a href="https://kubig-2021-2.tistory.com/55">[NLP 스터디] Attention Is All You Need 논문 리뷰</a>
<a href="https://science886.tistory.com/21">[Paper review] Attention 설명 + Attention Is All You Need 리뷰</a>
<a href="https://facerain.club/transformer-paper/">[논문 리뷰] Attention is All You Need</a></p>
]]></description>
        </item>
    </channel>
</rss>