<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ssom.log</title>
        <link>https://velog.io/</link>
        <description>[Data Science] 차근차근 쌓아나가는</description>
        <lastBuildDate>Wed, 23 Aug 2023 04:35:21 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ssom.log</title>
            <url>https://velog.velcdn.com/images/ssom_d/profile/8c721d5b-b04c-4b24-bfb4-68ad617a6d57/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ssom.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ssom_d" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[DL] 경사 하강법(Gradient Descent)]]></title>
            <link>https://velog.io/@ssom_d/DL-%EA%B2%BD%EC%82%AC-%ED%95%98%EA%B0%95%EB%B2%95Gradient-Descent</link>
            <guid>https://velog.io/@ssom_d/DL-%EA%B2%BD%EC%82%AC-%ED%95%98%EA%B0%95%EB%B2%95Gradient-Descent</guid>
            <pubDate>Wed, 23 Aug 2023 04:35:21 GMT</pubDate>
            <description><![CDATA[<h2 id="💡경사하강법">💡경사하강법</h2>
<ul>
<li>인공신경망은 손실 함수를 통해 자신의 파라미터를 검증한다.</li>
<li>특정 파라미터를 통해 나온 손실함수 값이 가장 낮은 곳이 최적의 파라미터이다.</li>
<li>경사하강법은 비용 함수를 최소화하는 매개변수를 찾기 위해 사용되는 알고리즘이다.</li>
<li>한마디로, 주어진 함수에서 극소점을 찾기 위해 기울기(gradient)가 최소가 되는 지점을 찾아가는 방법이다.</li>
</ul>
<h3 id="✅-gradient-descent-비유">✅ gradient descent 비유</h3>
<p>gradient descent는 등산을 할 때 정상에서 하산 할때에 많이 비유를 하곤 한다. 특히 우리가 앞이 보이지 않는 안개가 낀 산을 하산을 할때 모든 방향으로 더듬어 보며 비탈길의 경사가 가파른 방향으로 내려갈 것이다.</p>
<p>여기서 산 비탈길의 기울기가 그래프의 기울기로 보면 된다. 이 기울기가 감소하는 즉, gradient 가 descent 하는 방향으로 최적의 값을 찾는 방향으로 학습이 진행된다.
각 지점에서 gradient를 구하기 위해서는 각 점의 순간 변화량을 뜻하는 미분값을 알아야 한다.</p>
<h3 id="📌gradient-descent-수식-유도">📌gradient descent 수식 유도</h3>
<ul>
<li>2차 함수 그래프에서 최초 랜덤 위치에서 시작한다고 가정했을 때, 다음 지점은 어디로 가야 하는지에 대한 수식을 유도한다
<img src="https://velog.velcdn.com/images/ssom_d/post/17eb1931-fdae-4e9e-ad52-8a94fa62a04e/image.png" alt=""></li>
<li>현재 지점에서 기울기를 먼저 구한 뒤 </li>
<li>기울기가 양수인지 음수인지를 판단하고, </li>
<li>둘째로 얼마큼 이동할 것 인가(step size)를 정한 뒤 이동</li>
<li>위 그림에서 해당 지점의 기울기가 음수일 때는 양의 방향으로 , 양수일 경우는 음의 방향으로 이동하면 함수의 극소점을 찾을 수 있다. </li>
<li>얼마만큼 이동할 것인가에 대한 부분인 step size는  α로 많이 표현을 한다.<h4 id="gradient-descent-수식">[gradient descent 수식]</h4>
<img src="https://velog.velcdn.com/images/ssom_d/post/dea20d06-2395-4722-8222-85196e7318df/image.png" alt=""></li>
<li>xᵢ번째 에서의 기울기에 α 인 step size를 곱하고 기울기의 부호의 반대로 움직임으로써 마이너스 기호를 사용하여 xᵢ 번째에서 xᵢ₊₁번째로 이동을 하는 것</li>
</ul>
<h3 id="📌-경사하강법-순서">📌 경사하강법 순서</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/abefc761-9ccc-45c9-9761-4068f158049b/image.png" alt=""></p>
<ol>
<li>임의의 <em><strong>매개변수</strong>_를 정해 비용함수의 시작지점(</em><strong>x축</strong>_)으로 지정.</li>
<li>해당 매개변수로<em>** 모델의 오차**_를 구한 후, 비용함수의 시작지점(</em><strong>y축</strong>_)으로 지정.</li>
<li>시작 지점에서 다음 지점으로 갈 방향을 정하기 위해, 시작 지점의 기울기를 계산.</li>
<li>기울기(Gradient)와 보폭(Learning rate)을 사용해 다음 지점으로 이동.</li>
<li>위 과정을 _<strong>최소값</strong>_에 도달할 때까지 반복.</li>
</ol>
<h2 id="💡경사-하강법의-문제점">💡경사 하강법의 문제점</h2>
<h4 id="1-적절한-학습률-learning-rate">1. 적절한 학습률 (Learning Rate)</h4>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/398a68f9-e937-44f2-ac7f-54e305593ac2/image.png" alt=""></p>
<ul>
<li>학습률과 기울기 정보를 혼합해 나아갈 방향과 거리를 결정한다.</li>
<li>학습률이 높으면 한번에 이동하는 거리가 커지므로 최적값에 빨리 수렴할 수 있다.</li>
<li>그러나 너무 크게 설정하면 최적값에 수렴하지 못하고, 다른 곳으로 발산하는 현상이 나타날 수 있다.</li>
<li>반대로, 학습률이 낮으면 최적값에 수렴하는 시간이 오래 걸릴 수 있다.</li>
<li>적절한 learning rate값을 찾는 것이 중요하다.</li>
</ul>
<h4 id="2-local-minimum">2. local minimum</h4>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/15a1722e-1670-4280-a05c-9effc6d9e2ab/image.png" alt=""></p>
<ul>
<li>Global minimum을 목표로 해야하지만 local minimum에 빠지는 경우 탈출하지 못하고 그 점으로 수렴해버릴 수 있다.</li>
<li>local minima에서 탈출하기 위한 방법으로 momantum이나  stocastic gradient descent와 같은 여러 방법이 존재한다</li>
</ul>
<hr>
<p>출처
<a href="https://hi-guten-tag.tistory.com/205">https://hi-guten-tag.tistory.com/205</a>
<a href="https://dotiromoook.tistory.com/25">https://dotiromoook.tistory.com/25</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 풀링 계층 (Pooling Layer) 종류 (작성중)]]></title>
            <link>https://velog.io/@ssom_d/DL-%ED%92%80%EB%A7%81-%EA%B3%84%EC%B8%B5-Pooling-Layer-%EC%A2%85%EB%A5%98-%EC%9E%91%EC%84%B1%EC%A4%91</link>
            <guid>https://velog.io/@ssom_d/DL-%ED%92%80%EB%A7%81-%EA%B3%84%EC%B8%B5-Pooling-Layer-%EC%A2%85%EB%A5%98-%EC%9E%91%EC%84%B1%EC%A4%91</guid>
            <pubDate>Tue, 22 Aug 2023 12:27:05 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>CNN의 Layer 유형 3가지</p>
</blockquote>
<ul>
<li>Convolution Layer</li>
<li>Pooling Layer</li>
<li>Fully Connected Layer</li>
</ul>
<h2 id="stride">Stride</h2>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/a5602174-587d-4c2e-8422-26b49db4575d/image.png" alt=""></p>
<ul>
<li>Stride는 입력 이미지에서 필터를 몇 칸 씩 건너 뛰며 적용할지를 의미.</li>
<li>Stride = 1, 한칸씩 건너뛰며 필터 적용</li>
<li>(n,n) 이미지에 대해 p만큼 Padding한 후, (f,f) 필터로 s만큼 Stride하며 Convulution한다면,</li>
<li>출력 이미지의 크기는 ((n+2p-f)/s+1, (n+2p-f)/s+1)이 된다.</li>
</ul>
<h2 id="pooling-layer">Pooling Layer</h2>
<ul>
<li>CNN에는 Convolution layer 외 Pooling layer가 존재한다.</li>
<li>풀링은 네티워크의 복잡성과 계산 비용을 줄일 수 있다.<h4 id="풀링의-2가지-유형">[풀링의 2가지 유형]</h4>
</li>
</ul>
<ol>
<li>Max Pooling</li>
<li>Average Pooling</li>
</ol>
<h3 id="1-max-pooling">1. Max Pooling</h3>
<hr>
<ul>
<li>입력 이미지를 필터 크기만큼의 여러 영역으로 나눈 후,</li>
<li>이미지 위에서 필터를 이동하며, 필터 영역 내에서 최대값을 뽑으며 진행된다.</li>
<li>Max Pooling은 이미지에서 중요한 정보를 잡아놓는데 도움이 된다.<ul>
<li>아래 그림) (4,4)이미지에 대해 (2,2) 필터로 2만큼 stride하며 Max Pooling.
<img src="https://velog.velcdn.com/images/ssom_d/post/02d34f1a-bf64-4137-8ee8-201153180d01/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="2-average-pooling">2. Average Pooling</h3>
<hr>
<ul>
<li>입력 이미지를 필터 크기만큼의 여러 영역으로 나눈 후,</li>
<li>이미지 위에서 필터를 이동하며, 필터 영역 내에서 평균값을 뽑으며 진행된다.</li>
<li>Average Pooling은 이미지에서 중요한 정보와 덜 중요한 정보를 균형있게 잡아놓는데 도움이 된다.<ul>
<li>아래 그림) (4,4)이미지에 대해 (2,2) 필터로 2만큼 stride하며 Average Pooling.
<img src="https://velog.velcdn.com/images/ssom_d/post/05af0976-e496-42ea-832c-e929f6874973/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="풀링-연산의-장점">풀링 연산의 장점</h3>
<ul>
<li>잡음 처리</li>
<li>지나치게 상세한 특징 맵에서 요약 통계 추출<ul>
<li>특징 맵 축소됨.  ⇒ 속도 up, 메모리 효율</li>
</ul>
</li>
</ul>
<h3 id="풀링층-특성">풀링층 특성</h3>
<ul>
<li>학습할 매개변수 없음.<ul>
<li>단지 최대/평균 연산이기 때문</li>
</ul>
</li>
<li>특징 맵의 수가 그대로 유지됨.<ul>
<li>특징 맵마다 독립적 연산 적용</li>
</ul>
</li>
<li>작은 이동에 둔감하다.<ul>
<li>물체 인식, 영상 검색 등에 용이</li>
</ul>
</li>
</ul>
<hr>
<p>출처
<a href="https://wooono.tistory.com/234">https://wooono.tistory.com/234</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] 머신러닝에서의 다중공선성 문제 (작성중)]]></title>
            <link>https://velog.io/@ssom_d/ML%EC%97%90%EC%84%9C%EC%9D%98-%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1-%EB%AC%B8%EC%A0%9C</link>
            <guid>https://velog.io/@ssom_d/ML%EC%97%90%EC%84%9C%EC%9D%98-%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1-%EB%AC%B8%EC%A0%9C</guid>
            <pubDate>Tue, 22 Aug 2023 12:02:15 GMT</pubDate>
            <description><![CDATA[<h1 id="다중공선성-문제">다중공선성 문제</h1>
<p>독립 변수 간 상관관계가 매우 높을 때, 하나의 독립변수의 변화가 다른 독립변수에 영향을 미쳐 모델이 불안정해지는 것을 의미한다.</p>
<hr>
<p>Reference
<a href="https://velog.io/@jkl133/%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1%EA%B3%BC-MLDL-problems">https://velog.io/@jkl133/%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1%EA%B3%BC-MLDL-problems</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 과적합(Overfitting)과 해결법]]></title>
            <link>https://velog.io/@ssom_d/DL-%EA%B3%BC%EC%A0%81%ED%95%A9Overfitting%EA%B3%BC-%ED%95%B4%EA%B2%B0%EB%B2%95</link>
            <guid>https://velog.io/@ssom_d/DL-%EA%B3%BC%EC%A0%81%ED%95%A9Overfitting%EA%B3%BC-%ED%95%B4%EA%B2%B0%EB%B2%95</guid>
            <pubDate>Tue, 22 Aug 2023 11:48:59 GMT</pubDate>
            <description><![CDATA[<h2 id="과적합overfitting">과적합(Overfitting)</h2>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/5c2cedbc-efd9-456d-b922-85eb25806480/image.png" alt=""></p>
<ul>
<li>신경망이 훈련 데이터에만 지나치게 적응되어, 그 외 데이터에는 제대로 대응하지 못하는 상태.</li>
<li>이는 모델이 훈련 데이터의 노이즈까지 학습하여 발생한다.</li>
</ul>
<h2 id="과적합을-막는-방법들">과적합을 막는 방법들</h2>
<h3 id="1-데이터-증식-data-augmentation">1. 데이터 증식 (Data augmentation)</h3>
<ul>
<li>모델은 데이터의 양이 적을 경우, 데이터의 특정 패턴, 노이즈까지 쉽게 암기하기 때문에 과적합이 발생할 확률이 높다.</li>
<li>데이터의 양을 늘려 학습 데이터의 다양성을 높이는 방법이 있다.</li>
<li>하지만 실제 데이터의 양을 늘리는 것엔 한계가 있다.</li>
<li>의도적으로 기존의 데이터를 변형,추가 하는 data augmentation 방법을 이용한다.<ul>
<li>이미지를 돌리거나, 노이즈 추가, 일부 수정 등 </li>
</ul>
</li>
</ul>
<h3 id="2-모델-복잡도-줄이기">2. 모델 복잡도 줄이기</h3>
<ul>
<li>인공 신경망의 복잡도는 은닉층(hidden layer)의 수, 매개변수 수 등으로 결정된다.</li>
<li>따라서 네트워크의 층 수, 뉴런 수를 줄여 모델의 복잡도를 낮춘다.<blockquote>
<p><em>인공 신경망에서는 모델의 <strong>매개변수의 수</strong>를 <strong>모델의 수용력(capacity)</strong>라고도 한다.</em></p>
</blockquote>
</li>
</ul>
<h3 id="3-가중치-규제-regularization">3. 가중치 규제 (Regularization)</h3>
<ul>
<li>가중치에 규제를 적용하여 네트워크의 복잡도를 줄인다. <ul>
<li>L1 규제와 L2 규제가 대표적</li>
</ul>
</li>
<li><strong>L1 규제</strong> : 가중치 w들의 <strong>절대값 합계</strong>를 cost function에 추가</li>
<li><strong>L2 규제</strong> : <strong>모든 가중치 w</strong>들의 <strong>제곱합</strong>을 cost function에 추가</li>
</ul>
<h3 id="4-드롭아웃-dropout">4. 드롭아웃 (Dropout)</h3>
<ul>
<li>학습 과정에서 일부 뉴런을 무작위로 비활성화하여 네트워크의 복잡도를 줄인다.
<img src="https://velog.velcdn.com/images/ssom_d/post/cb8c5aa8-e61a-4393-b805-06473338a2c5/image.png" alt=""></li>
<li>예를 들어, 드롭아웃 비율을 0.5로 설정하면, 학습마다 랜덤으로 절반의 뉴런을 사용하지 않는다.</li>
<li>드롭아웃은 신경망 학습 시에만 사용하고, 예측 시에는 사용하지 않는다.<ul>
<li>학습 시에는 인공 신경망이 특정 뉴런, 조합에 너무 의존적이게 되는 것을 방지해줌.</li>
<li>매번 랜덤으로 뉴런을 사용하지 않으므로 -&gt; 서로 다른 신경망들을 앙상블해 사용하는 것과 같은 효과를 내어 과적합을 방지한다.</li>
</ul>
</li>
<li>드롭아웃 코드 예제<pre><code>from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense
</code></pre></li>
</ul>
<p>max_words = 10000
num_classes = 46</p>
<p>model = Sequential()
model.add(Dense(256, input_shape=(max_words,), activation=&#39;relu&#39;))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(128, activation=&#39;relu&#39;))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(num_classes, activation=&#39;softmax&#39;))</p>
<p>```</p>
<hr>
<p>출처
<a href="https://wikidocs.net/61374">https://wikidocs.net/61374</a>
책 &lt;밑바닥부터 시작하는 딥러닝&gt;, &lt;딥러닝을 이용한 자연어 처리 입문&gt;
<a href="https://deep-learning-study.tistory.com/167">https://deep-learning-study.tistory.com/167</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Bias(편향) - Variance(분산) Trade-Off]]></title>
            <link>https://velog.io/@ssom_d/Bias%ED%8E%B8%ED%96%A5-Variance%EB%B6%84%EC%82%B0-Trade-Off</link>
            <guid>https://velog.io/@ssom_d/Bias%ED%8E%B8%ED%96%A5-Variance%EB%B6%84%EC%82%B0-Trade-Off</guid>
            <pubDate>Tue, 22 Aug 2023 11:01:02 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Bias-Variance trade-off 란, 모델링 할 때 error 처리를 위해 중요하게 알아야하는 개념이며, 자주 헷갈릴 수 있다.</p>
</blockquote>
<h3 id="bias-편향">Bias (편향)</h3>
<ul>
<li>편향은 <strong>예측값과 실제값의 차이</strong>다.</li>
<li>편향이 크다는 것은 예측값-실제값 차이가 크다는 것<ul>
<li>이는 &quot;과소적합&quot;을 의미한다.</li>
</ul>
</li>
</ul>
<h3 id="variance-분산">Variance (분산)</h3>
<ul>
<li>분산은 입력에 따른 <strong>예측값의 변동성</strong>을 의미한다.</li>
<li>분산이 크다는 것은 입력에 따른 예측값의 변동성이 크다는 것<ul>
<li>이는 &quot;과대적합&quot;을 의미한다.</li>
</ul>
</li>
</ul>
<h3 id="trade-off">Trade-off</h3>
<ul>
<li>Trade-off는 시소처럼 한쪽이 올라가면 한쪽이 내려가는 관계를 의미한다.</li>
</ul>
<h3 id="예제-1">[예제 1]</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/008d9158-8989-42b7-9ff5-2bf15aa50eac/image.png" alt=""></p>
<ul>
<li><span style="color: Blue">파란 점 : 예측값</span>
<span style="color: red">빨간 원 : 실제값</span></li>
<li>Bias가 높다는 것<ul>
<li>예측값-실제값의 오차가 크다는 것 -&gt; &quot;과소적합&quot;</li>
</ul>
</li>
<li>Variance가 높다는 것<ul>
<li>예측값의 변동성이 크다는 것 -&gt; &quot;과대적합&quot;</li>
</ul>
</li>
</ul>
<h3 id="예제-2">[예제 2]</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/084cd9c8-8575-40ff-a960-dbb9c57e56e4/image.png" alt=""></p>
<ul>
<li>왼쪽 그래프 : 큰 bias, 작은 variance</li>
<li>오른쪽 그래프 : 작은 bias, 큰 variance</li>
</ul>
<hr>
<h4 id="bias-관점">bias 관점</h4>
<ul>
<li>왼쪽 그래프의 예측값-실제값 차이는 오른쪽 그래프보다 큼 -&gt; &quot;큰 bias&quot;</li>
<li>오른쪽 그래프의 예측값-실제값 차이는 0이다 -&gt; &quot;작은 bias&quot;<h4 id="variance-관점">variance 관점</h4>
</li>
<li>왼쪽 그래프는 일반화가 잘 되어 있음 -&gt; 예측값이 일정한 패턴 -&gt; &quot;작은 variance&quot;</li>
<li>오른쪽 그래프 : 예측 값이 불규칙 패턴 -&gt; &quot;큰 variance&quot;</li>
</ul>
<h3 id="예제-3">[예제 3]</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/a4a2b8f6-a4e0-4244-88ad-0034759c681b/image.png" alt=""></p>
<ul>
<li>모델을 학습 시킬수록 모델의 복잡도는 더 올라간다.</li>
<li>그래프의 X축 : 모델 복잡도(model complexity)</li>
<li>모델이 단순해질수록, Bias 증가▲, Variance 감소▼ </li>
<li>모델이 복잡해질수록, Bias 감소▼, Variance 증가▲</li>
<li>전체 Error는 Bias와 Variance 간의 Trade-off 관계 때문에, 계속 학습 시킨다고 해도 쉽게 줄어든지 않는다.</li>
<li>즉, 무조건 Bias만 줄일 수도, 무조건 Variance만 줄일 수도 없기 때문에, Bias와 Variance의 합이 최소가 되는 적당한 지점을 찾아 최적의 모델을 만들어야한다.</li>
</ul>
<hr>
<p>출처
<a href="https://wooono.tistory.com/220">https://wooono.tistory.com/220</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] Feature Selection]]></title>
            <link>https://velog.io/@ssom_d/ML-Feature-Selection</link>
            <guid>https://velog.io/@ssom_d/ML-Feature-Selection</guid>
            <pubDate>Mon, 21 Aug 2023 07:35:13 GMT</pubDate>
            <description><![CDATA[<h1 id="feature-selection이란">Feature Selection이란</h1>
<ul>
<li>Feature selection은 모델링 시 raw data의 모든 feature를 사용하는 것은 computing power와 memory 측면에서 매우 비효율적이기 때문에</li>
<li>일부 필요한 feature만 선택하는 방법ㅣ다.</li>
<li>유사하지만 다른 표현의 3가지 feature 처리<ul>
<li>Feature Engineering : 도메인 지식을 사용하여 데이터에서 피쳐를 변형/생성<ul>
<li>&quot;feature를 어떻게 유용하게 만들 것인가&quot;</li>
</ul>
</li>
<li>Feature Extraction : 차원축소 등 새로운 중요 피쳐를 추출</li>
<li>Feature Selection : 기존 피쳐에서 원하는 피쳐만 (변경하지 않고) 선택<ul>
<li>&quot;유용한 feature를 어떻게 선택할 것인가&quot;</li>
</ul>
</li>
</ul>
</li>
<li>Feature Selection의 장점<ul>
<li>사용자가 해석하기 쉽게 모델을 단순화</li>
<li>훈련 시간의 축소</li>
<li>차원의 저주 방지</li>
<li>일반화</li>
</ul>
</li>
</ul>
<h2 id="어떤-방법론을-사용할-것인가">어떤 방법론을 사용할 것인가?</h2>
<ul>
<li>시간과 자원이 충분하다면 모든 방법을 테스트하여 구하고자 하는 score가 높은 feature subset을 사용하면 된다.</li>
<li>현실적 한계 때문에, 평가 메트릭에 따라 적합한 방법을 사용하는 것이 좋다.<h4 id="feature-selection의-방법론-3가지">[Feature Selection의 방법론 3가지]</h4>
</li>
</ul>
<ol>
<li><strong>Filter Method</strong> : Feature 간 관련성을 측정하는 방법</li>
<li><strong>Wrapper Method</strong> : Feature Subset의 유용성을 측정하는 방법</li>
<li><strong>Embedded Method</strong> : Feature Subset의 유용성을 측정하지만, 내장 metric을 사용하는 방법</li>
</ol>
<h2 id="1-filter-method--높은-상관관계-이용">1. Filter Method : 높은 상관관계 이용</h2>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/422ceed4-3896-448e-8ef7-f1df8ea7d45c/image.png" alt=""></p>
<ul>
<li>통계적 측정 방법으로 피처 간 상관관계를 알아내, 높은 상관계수(영향력)를 가지는 피처를 사용하는 방법</li>
<li>하지만 상관계수가 높다고 모델에 적합하다 판단은 금물<h4 id="filter-method-방법들">[Filter Method 방법들]</h4>
<ul>
<li>information gain</li>
<li>chi-square test (카이제곱)</li>
<li>fisher score</li>
<li>correlation coefficient      <ul>
<li>흔히 correlation heatmap으로 시각화</li>
</ul>
</li>
<li>variance threshold</li>
</ul>
</li>
</ul>
<h2 id="2-wrapper-method--예측-정확도-이용">2. Wrapper Method : 예측 정확도 이용</h2>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/ef508e79-fc0c-4342-b10c-a9e251265e77/image.png" alt=""></p>
<ul>
<li>예측 정확도 측면 가장 좋은 성능을 보이는 Feature subset(피처 집합)을 뽑아내는 방법</li>
<li>이 경우, 기존 데이터에서 테스트 진행할 hold-out set을 따로 두어야 하며</li>
<li>여러번 실험을 통해 시간과 비용이 높게 발생하지만</li>
<li>최종적 Best Feature Subset을 찾기 때문에 모델 성능에는 아주 도움이 됨.<h4 id="wrapper-method-방법들">[Wrapper Method 방법들]</h4>
</li>
<li><ul>
<li><ol>
<li>Forward Selection(전진 선택)</li>
</ol>
</li>
</ul>
</li>
<li><ul>
<li><ul>
<li>변수가 없는 상태로 시작</li>
<li>반복 마다 가장 중요한 변수를 추가하여 더이상 성능 향상이 없을 때까지 반복</li>
</ul>
</li>
</ul>
</li>
<li><ul>
<li><ol start="2">
<li>Backward Selection(후방 제거)</li>
</ol>
</li>
</ul>
</li>
<li><ul>
<li><ul>
<li>모든 변수를 갖고 시작</li>
<li>가장 덜 중요한 변수를 하나씩 제거하며 더 이상 성능 향상 없을 때까지 반복</li>
</ul>
</li>
</ul>
</li>
<li><ul>
<li><ol start="3">
<li>Stepwise Selection(단계별 선택)</li>
</ol>
</li>
</ul>
</li>
<li><ul>
<li><ul>
<li>Forward Selection + Backward Selection 결합</li>
<li>모든 변수를 갖고 시작</li>
<li>도움 안되는 변수 삭제 하거나, 모델에서 빠져있는 변수 중 가장 중요한 변수 추가</li>
<li>반대로 변수 없이 시작하여 변수 추가 삭제 반복할 수도 있음.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="3-embedded-method">3. Embedded Method</h2>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/600ace5c-9b0e-40de-90d2-a86d4bb3b9e8/image.png" alt=""></p>
<ul>
<li>Filtering + Wrapper의 장점 결합</li>
<li>각각 Feature 직접 학습하며, 모델의 정확도에 기여하는 Feature를 선택</li>
<li>계수가 0이 아닌 Feature가 선택되어, 더 낮은 복잡성으로 모델을 훈련하며, 학습 절차 최적화<h4 id="embedded-method-방법들">[Embedded Method 방법들]</h4>
</li>
<li>LASSO : L1-norm을 통해 제약 주는 방법</li>
<li>Ridge : L2-norm을 통해 제약 주는 방법</li>
<li>Elastic Net : 위 둘을 선형 결합한 방법</li>
<li>SelectFromModel<ul>
<li>decision tree 기반 알고리즘에서 피처를 뽑아오는 방법</li>
<li>RandomForest, LightGBM 등</li>
</ul>
</li>
</ul>
<hr>
<p>Reference
<a href="https://wooono.tistory.com/249">https://wooono.tistory.com/249</a>
<a href="https://subinium.github.io/feature-selection/">https://subinium.github.io/feature-selection/</a>
<a href="https://firework-ham.tistory.com/48">https://firework-ham.tistory.com/48</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] 주성분 분석(PCA)에 대한 이해]]></title>
            <link>https://velog.io/@ssom_d/%EC%A3%BC%EC%84%B1%EB%B6%84-%EB%B6%84%EC%84%9DPCA%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@ssom_d/%EC%A3%BC%EC%84%B1%EB%B6%84-%EB%B6%84%EC%84%9DPCA%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Mon, 21 Aug 2023 05:34:03 GMT</pubDate>
            <description><![CDATA[<h1 id="1-차원-축소">1. 차원 축소</h1>
<p>밑의 데이터는 외출 활동이 좋은지 아닌지 분류하는 모델을 만들고자 할때, 날씨 데이터의 Feature가 101가지로 들어온 데이터다.
이는 101차원의 데이터와 같은 의미다.</p>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/27a72f60-bae2-44f3-bc99-6a8c00e11d82/image.png" alt=""></p>
<p>고차원 데이터는 계산과 시각화의 어려움으로 분석이 힘들어진다.
원 데이터의 분포를 가능한 유지하며 데이터의 차원을 줄이는 것이 _<strong>차원 축소(dimensionality reduction)</strong>_이다.</p>
<h3 id="다중-공선성-문제">&quot;다중 공선성 문제&quot;</h3>
<p>강한 상관관계를 가지는 몇몇 feature들을 함께 학습 시킬 경우,
모델의 과적합이 발생하여 성능이 저하될 수 있다.</p>
<p>이를 방지하기 위해 feature를 선택/가공하는 과정을 거친다. (3가지)</p>
<p>1) Feature Selection : 필요한 feature만 선택.
2) Feature Extraction : 작은 차원으로 feature를 mapping한다.
    차원 축소 기법들 -&gt; PCA, LDA, SVD, NMF 등.
3) Feature Engineering : feature가 부족할때, 모델의 기능 활용 목적에 따라 새로운 feature들을 생성하는 것.</p>
<h1 id="2-주성분-분석-pca-princial-component-analysis">2. 주성분 분석 PCA (Princial Component Analysis)</h1>
<p>여러 피쳐들이 갖는 정보들을 하나로 압축한다.</p>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/79670b5d-5f6a-4aa8-881b-e94be7544118/image.png" alt="">
위 그래프 중 (습도,강수량) or (풍속,태풍여부)는 각각 밀접한 연관성이 있다.
이러한 연관성이 높은 피처들을 하나로 합쳐주는 작업을 뜻한다.</p>
<hr>
<p>Reference
(코드) <a href="https://huidea.tistory.com/44">https://huidea.tistory.com/44</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Spectral images based sound classification using CNN with meaningful data augmentation (2020)]]></title>
            <link>https://velog.io/@ssom_d/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Spectral-images-based-sound-classification-using-CNN-with-meaningful-data-augmentation-2020</link>
            <guid>https://velog.io/@ssom_d/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Spectral-images-based-sound-classification-using-CNN-with-meaningful-data-augmentation-2020</guid>
            <pubDate>Fri, 09 Jun 2023 12:16:56 GMT</pubDate>
            <description><![CDATA[<aside>
📌 Tag : Transfer Learning, Classification, CNN, Audio, ECG 
</aside>

<h1 id="abstract">Abstract</h1>
<hr>
<ul>
<li><p>많은 오디오 녹음에는 배경 소음, 매우 짧은 간격 및 클립의 급격한 변화가 있기 때문에,</p>
<p>  짧은 audio clips을 통해 특징을 추출하고 다양한 소리를 분류하는 것은 쉽지 않다.</p>
</li>
<li><p><strong>possibility of overfitting</strong>의 위험을 피하기 위해 <strong>training samples</strong> 수는 많을 수록 좋다.</p>
</li>
<li><p>따라서, <strong>data aumentation이 필요</strong> → 더 많은 training samples 제공 + 모델의 정확도와 성능 높일 수 있다.</p>
</li>
<li><p>본 연구에서 제안하는 방법론은 학습의 성과를 향상시키기 위한 의미 있는 <strong>data aumentation의 아이디어를 포함한다.</strong></p>
</li>
<li><p><strong>의미 있는 data augmentation</strong>과 함께 <strong>CNN</strong>을 사용하여 환경 소리 분류를 기반으로 하는 <strong>spectral images의 효과적인 접근 방식을 제안한다.</strong></p>
</li>
<li><p><em><strong>접근 방식</strong></em></p>
<ul>
<li><strong>스펙트로그램 이미지의 형태</strong>로 오디오 클립의 기능을 정의한다.</li>
</ul>
</li>
<li><p>이미지에 사용 가능한 data augmentation을 사용하는 대신, <strong>오디오 클립에 직접 적용되는 variations을 고려</strong>하여 의미 있는 data augmentation을 제안한다.</p>
</li>
<li><p><strong>Result</strong></p>
<ul>
<li>The ResNet-152 model<ul>
<li>ESC-10 data set :  99.04%</li>
<li>Us8k data set : 99.49%</li>
</ul>
</li>
<li>DenseNet-161 model<ul>
<li>ESC-50 data set : 97.57%</li>
</ul>
</li>
</ul>
</li>
</ul>
<pre><code>        _→ ESC-50 data set에서 이전에 발표된 모든 방법 중 최고의 정확도를 보여주었다._</code></pre><ul>
<li><strong>개선 : 의미 있는 data augmentation로 정확도를 향상시켰다.</strong></li>
</ul>
<h1 id="intro">Intro</h1>
<hr>
<ul>
<li>Mel spectrogram 기능을 사용하여, 스펙트로그램 이미지 형태로 오디오 클립의 기능을 정의.</li>
<li>spectral images는 오디오 신호에 대한 주파수 스펙트럼의 visible representation으로 볼 수 있음.</li>
<li>spectral images의 장점<ul>
<li>the audio signals are less periodic</li>
<li>weak ambiance</li>
<li>short interval</li>
<li>the addition of noise on audio signals is much easy as compared with images</li>
</ul>
</li>
<li>Data set.<ul>
<li>Environment Sound Classification Data<ul>
<li>ESC-10</li>
<li>ESC-50</li>
<li>Urbansound8k (Us8k)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="methodology">Methodology</h1>
<hr>
<ul>
<li>the classification of sounds from the environment after converting the audio clips into spectrogram images.</li>
<li><strong>Model</strong> : DCNN, transfer learning models</li>
</ul>
<h2 id="2-approaches">2 approaches</h2>
<p><strong>1. M1 ) TAA (Traditional Augmentation Approach)</strong></p>
<ul>
<li>traditional method available for various image-based training tasks</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/14eaddaf-f699-4204-bc2e-c01e9862dd3c/image.png" alt=""></p>
<ul>
<li>used Kera’s package</li>
<li>respective values<ul>
<li>Zoom range: 0.25</li>
<li>Width shift: 0.20</li>
<li>Fill mode: nearest</li>
<li>Brightness range: [0.5,1.5]</li>
<li>Rotation angle: 30</li>
<li>Height shift: 0.20</li>
<li>Shear range: 0.30</li>
<li>Horizontal flip: True</li>
</ul>
</li>
</ul>
<p>*<em>1. M2 ) NAA (Novel Augmentation Approarch)
*</em></p>
<ul>
<li>classification of different sounds by using spectrogram images</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/aa1eb490-8ae8-44ec-afa2-d25076e6b131/image.png" alt=""></p>
<ul>
<li>학습을 위해 generated audio clips는 Mel-spectrogram images로 변환.</li>
<li>used Librosa library</li>
</ul>
<hr>
<h2 id="-5-transformation-">[ 5 Transformation ]</h2>
<h3 id="1-pitch-shift-transformation">1) Pitch shift transformation.</h3>
<aside>
💡 shift audio to left/right with a random second

</aside>

<p><img src="https://velog.velcdn.com/images/ssom_d/post/929a3a77-51d6-4614-a9e2-8bdbdaa99aac/image.png" alt=""></p>
<ul>
<li><p>Positive pitch shift (PPS)</p>
<ul>
<li>양의 피치 이동 (+2)</li>
</ul>
</li>
<li><p>Negative pitch shift (NPS)</p>
<ul>
<li>음의 피치 이동 (-2)</li>
</ul>
</li>
<li><p>code</p>
<pre><code class="language-python">  import numpy as np
  def manipulate(data, sampling_rate, shift_max, shift_direction):
      shift = np.random.randint(sampling_rate * shift_max)
      if shift_direction == &#39;right&#39;:
          shift = -shift
      elif self.shift_direction == &#39;both&#39;:
          direction = np.random.randint(0, 2)
          if direction == 1:
              shift = -shift
      augmented_data = np.roll(data, shift)
      # Set to silence for heading/ tailing
      if shift &gt; 0:
          augmented_data[:shift] = 0
      else:
          augmented_data[shift:] = 0
      return augmented_data</code></pre>
</li>
</ul>
<h3 id="2-time-stretches-transformation">2) Time stretches transformation.</h3>
<aside>
💡 It stretches times series by a fixed rate. 
performed by librosa function.

</aside>

<p><img src="https://velog.velcdn.com/images/ssom_d/post/32a8b305-a132-452a-b4d4-4a58c6da4b3b/image.png" alt="">
<img src="https://velog.velcdn.com/images/ssom_d/post/11b095b9-b248-4584-bbc0-e3e51445f396/image.png" alt=""></p>
<ul>
<li><p>Slow time stretches (STS)</p>
<ul>
<li>slow down by the factor of (0.7)</li>
</ul>
</li>
<li><p>Fast time stretches (FTS)</p>
<ul>
<li>fast by the value of (1.20)</li>
</ul>
</li>
<li><p>code</p>
<pre><code>import librosa

def manipulate(data, speed_factor):
    return librosa.effects.time_stretch(data, speed_factor)</code></pre></li>
</ul>
<h3 id="3-trim-silence">3) Trim silence.</h3>
<aside>
💡 This technique helps to trail or trim the silence part of the audio signals.

</aside>

<p><img src="https://velog.velcdn.com/images/ssom_d/post/40243cc5-849d-43e2-8a4b-376f893d7941/image.png" alt="">
<img src="https://velog.velcdn.com/images/ssom_d/post/dd97c202-fbdf-4f84-bb5e-8d8334eb2dc8/image.png" alt=""></p>
<ul>
<li><p>Trim silence (TS)</p>
<ul>
<li>trail or trim the silence signal</li>
</ul>
</li>
<li><p>code</p>
<pre><code>  from scipy.io.wavfile import read, writedef remove_silence(file,sil,keep_sil,out_path):
      &#39;&#39;&#39;
      This function removes silence from the audio.

      Input:
      file = Input audio file path
      sil = List of silence time slots that needs to be removed
      keep_sil = Time to keep as allowed silence after removing silence
      out_path = Output path of audio file

      returns:
      Non - silent patches and save the new audio in out path
      &#39;&#39;&#39;
      rate,aud=read(path)
      a=float(keep_sil)/2
      sil_updated=[(i[0]+a,i[1]-a) for i in sil]

      # convert the silence patch to non-sil patches
      non_sil=[]
      tmp=0
      ed=len(aud)/rate
      for i in range(len(sil_updated)):
          non_sil.append((tmp,sil_updated[i][0]))
          tmp=sil_updated[i][1]
      if sil_updated[-1][1]+a/2&lt;ed:
          non_sil.append((sil_updated[-1][1],ed))
      if non_sil[0][0]==non_sil[0][1]:
          del non_sil[0]

      # cut the audio
      print(&#39;slicing starte&#39;)
      ans=[]
      ad=list(aud)
      for i in tqdm.tqdm(non_sil):
          ans=ans+ad[int(i[0]*rate):int(i[1]*rate)]
      #nm=path.split(&#39;/&#39;)[-1]
      write(out_path,rate,np.array(ans))
      return non_sil</code></pre></li>
</ul>
<h1 id="results">Results</h1>
<hr>
<h2 id="cnn">&lt; CNN &gt;</h2>
<h4 id="result-1-7계층-제안-cnn-아키텍처에-대한-학습-정확도-대-검증-정확도-결과">Result 1) 7계층 제안 CNN 아키텍처에 대한 학습 정확도 대 검증 정확도 결과</h4>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/6f79edc2-91c0-401a-9980-67e16d22b2f1/image.png" alt=""></p>
<ul>
<li>Data set.<ul>
<li>(a), (b) : ESC-10</li>
<li>(c), (d) : ESC-50</li>
<li>(e), (f) : Us8k</li>
</ul>
</li>
</ul>
<h4 id="result-2-9계층-제안-cnn-아키텍처에-대한-학습-정확도-대-검증-정확도-결과">Result 2) 9계층 제안 CNN 아키텍처에 대한 학습 정확도 대 검증 정확도 결과</h4>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/95edfd27-5691-4c2a-88d8-1d92dead410e/image.png" alt=""></p>
<ul>
<li>Data set.<ul>
<li>(g),(h) : ESC-10 관련</li>
<li>(I),(j) : ESC-50</li>
<li>(k),(l) : Us8k</li>
</ul>
</li>
</ul>
<h3 id="the-performance-comparison-of-naa-with-taa-by-using-7---9-layers-cnn">[The performance comparison of NAA with TAA by using 7- &amp; 9-layers CNN]</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/cd11f874-83a5-4505-af56-3d73369fa479/image.png" alt=""></p>
<h1 id="transfer-learning-models">&lt; Transfer learning models &gt;</h1>
<hr>
<h3 id="comparison-of-the-accuracies-of-transfer-learning-models">[Comparison of the accuracies of Transfer learning models]</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/deb3a645-5dcc-405c-89d5-bf43a1b49c65/image.png" alt=""></p>
<ul>
<li>ESC-50 data set에서 이전에 발표된 모든 방법 중 97.57%로 최고의 정확도를 보여주었다.</li>
<li>(나머지 data도 동일하게 정확도가 훨씬 높다.)</li>
</ul>
<h3 id="the-performance-comparison-of-naa-with-taa-by-using-transfer-learning-models-for-the-esc-50-dataset">[The performance comparison of NAA with TAA by using Transfer learning models for the ESC-50 dataset.]</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/77f37557-e071-42b3-8a3d-1e863ad6f0de/image.png" alt=""></p>
<ul>
<li><p>The distinct pre-trained weights : (ResNet, DenseNet, AlexNet, SqueezeNet, VGG)</p>
</li>
<li><p>DenseNet-161 model의 NAA는 가장 lowest loss value (0.0835)를 달성하였다.</p>
<p>  → 이 또한 ESC-5 data의 모든 방법론 중 가장 높은 정확도를 달성</p>
</li>
</ul>
<h2 id="기존-연구와-naa-비교">[기존 연구와 NAA 비교]</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/583e5626-6dfd-4767-b649-e89de2ae93df/image.png" alt=""></p>
<ul>
<li>NAA가 압도적으로 높은 정확도를 보이고 있다.</li>
</ul>
<hr>
<ul>
<li>augmentation techniques를 사용한 다양한 예측 알고리즘, CNN, transfer learning models들은 overfitting 문제를 극복하지 못하고 광범위한 불균형을 초래한다.</li>
<li>이 문제를 해결할 수 있는 방법 중 하나는 정규화와 의미 있는 augmentation이다.</li>
</ul>
<h1 id="refernce">Refernce</h1>
<hr>
<h3 id="pdf">PDF</h3>
<p><a href="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c9abdd0c-1c06-414f-924a-9769f247bbe2/Spectral_images_based_environmental_sound_classification_using_CNN.pdf">Spectral images based environmental sound classification using CNN.pdf</a></p>
<h3 id="posters">Posters</h3>
<p>data augmentation</p>
<p><a href="https://kr.mathworks.com/help/audio/ref/stretchaudio.html">https://kr.mathworks.com/help/audio/ref/stretchaudio.html</a></p>
<p><a href="http://kth.diva-portal.org/smash/get/diva2:1381398/FULLTEXT01.pdf">http://kth.diva-portal.org/smash/get/diva2:1381398/FULLTEXT01.pdf</a></p>
<p><a href="https://medium.com/@makcedward/data-augmentation-for-audio-76912b01fdf6">https://medium.com/@makcedward/data-augmentation-for-audio-76912b01fdf6</a></p>
<p><a href="https://www.semanticscholar.org/paper/Pitch-shifting-algorithm-design-and-applications-in-Royer/e48cb1a41912a3caf7af7f078df17fb6f8884796">https://www.semanticscholar.org/paper/Pitch-shifting-algorithm-design-and-applications-in-Royer/e48cb1a41912a3caf7af7f078df17fb6f8884796</a></p>
<p><a href="https://onkar-patil.medium.com/how-to-remove-silence-from-an-audio-using-python-50fd2c00557d">https://onkar-patil.medium.com/how-to-remove-silence-from-an-audio-using-python-50fd2c00557d</a></p>
<p>kaggle : <a href="https://www.kaggle.com/code/CVxTz/audio-data-augmentation/notebook">https://www.kaggle.com/code/CVxTz/audio-data-augmentation/notebook</a></p>
<p>spectrogram</p>
<p><a href="https://towardsdatascience.com/data-augmentation-for-speech-recognition-e7c607482e78">https://towardsdatascience.com/data-augmentation-for-speech-recognition-e7c607482e78</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] predict vs predict_proba 차이]]></title>
            <link>https://velog.io/@ssom_d/Python-predict-vs-predictproba-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@ssom_d/Python-predict-vs-predictproba-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Thu, 27 Apr 2023 10:27:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>predict() 메소드는 범주를 예측하여 반환하고,
predict_praba() 메소드는 확률(probability)을 반환합니다. </p>
</blockquote>
<pre><code>## prediction for test set
y_pred = clf.predict(X_test) # class
y_pred_proba = clf.predict_proba(X_test) # probability</code></pre><p>1) predict(test)
predict의 경우, 각각 모델의 최종 예측값 출력
ex) 회귀 모델 : 0.3456... 특정 값 출력
분류 모델 : 0,1,2,3 등 가장 확률 높은 클래스 출력</p>
<p>2) predict_proba(test)
분류 모델이 각 클래스에 대한 확률을 출력 (회귀에는 사용 불가)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문] 딥러닝 논문 TIP]]></title>
            <link>https://velog.io/@ssom_d/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%85%BC%EB%AC%B8-TIP</link>
            <guid>https://velog.io/@ssom_d/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%85%BC%EB%AC%B8-TIP</guid>
            <pubDate>Mon, 10 Apr 2023 08:17:20 GMT</pubDate>
            <description><![CDATA[<ol>
<li>awesome-deep-learning-papers
2012년부터 2016년까지 발표된 논문 중 다양한 연구에 활용할 수 있는 획기적인 딥러닝 논문 100편을 정리한 깃허브 레포지토리입니다.
<a href="https://github.com/terryum/awesome-deep-learning-papers">링크텍스트</a></li>
</ol>
<ol start="2">
<li>Papers You Must Read (PYMR)
고려대학교 DSBA 연구실에서 선정한 데이터를 공부할 때 필독 해야하는 논문 리스트입니다. 
딥러닝 뿐만 아니라 데이터마이닝, 앙상블 같은 머신러닝 논문도 포함하고 있습니다.
<a href="https://www.notion.so/c3b3474d18ef4304b23ea360367a5137?v=5d763ad5773f44eb950f49de7d7671bd">링크텍스트</a></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이토치(PyTorch) 한번에 끝내기 : (2) Autograd(자동 미분)]]></title>
            <link>https://velog.io/@ssom_d/%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98PyTorch-2-Autograd%EC%9E%90%EB%8F%99-%EB%AF%B8%EB%B6%84</link>
            <guid>https://velog.io/@ssom_d/%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98PyTorch-2-Autograd%EC%9E%90%EB%8F%99-%EB%AF%B8%EB%B6%84</guid>
            <pubDate>Thu, 02 Mar 2023 11:56:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>본 포스트는 이수안컴퓨터연구소님의 파<a href="https://www.youtube.com/watch?v=k60oT_8lyFw&amp;t=4351s">이토치 한번에 끝내기 PyTorch Full Tutorial Course 강의</a>를 듣고 작성되었습니다.</p>
</blockquote>
<h1 id="autograd자동미분">Autograd(자동미분)</h1>
<blockquote>
<ul>
<li><code>torch.autograd</code> 패키지는 Tensor의 모든 연산에 대해 <strong>자동 미분</strong> 제공</li>
</ul>
</blockquote>
<ul>
<li>이는 코드를 어떻게 작성하여 실행하느냐에 따라 역전파가 정의된다는 뜻</li>
<li><code>backprop</code>를 위해 미분값을 자동으로 계산</li>
</ul>
<h2 id="1-연산-추적기록--requires_grad">1. 연산 추적(기록) : requires_grad</h2>
<p><code>requires_grad</code></p>
<ul>
<li><p>속성을 <code>True</code>로 설정하면, 해당 텐서에서 이루어지는 모든 연산들을 추적 시작</p>
</li>
<li><p>기본 텐서의 gradient값은 <code>False</code></p>
<pre><code>a = torch.randn(3,3)
a = a * 3
print(a)
print(a.requires_grad)</code></pre><pre><code>tensor([[-3.4160, -4.7597,  1.9489],
      [ 0.4322,  0.9619,  1.0409],
      [ 3.0706, -1.8473,  2.5310]])
False</code></pre></li>
</ul>
<p><code>requires_grad_(True)</code></p>
<ul>
<li>gradient 값을 True로 변경해야 추적 시작<ul>
<li>requires_grad_()</li>
<li>기존 텐서의 requires_grad값을 바꿔치기(in-place)하여 변경<pre><code>a.requires_grad_(True)</code></pre></li>
</ul>
</li>
</ul>
<p><code>grad_fn</code>   </p>
<ul>
<li>미분값을 계산한 함수에 대한 정보 저장</li>
<li>backpropagation 할 때 어떤 연산을 했는지, 어떤 함수에 대해 진행했는지 기록을 저장<pre><code>b = (a * a).sum()   # 결과 : a*a 결과 값 모두 합친 값 한 개
print(b)
print(b.grad_fn)</code></pre><pre><code>tensor(59.5639, grad_fn=&lt;SumBackward0&gt;)  # sum 이라는 연산을 했음을 기록
&lt;SumBackward0 object at 0x7fce31cd6190&gt;</code></pre></li>
</ul>
<h2 id="2-기울기gradient">2. 기울기(Gradient)</h2>
<h4 id="1-gradient-추적하는-과정-살펴보기">(1) gradient 추적하는 과정 살펴보기</h4>
<ol>
<li><p>연산 정보 추적할 수 있도록 requires_grad = True 지정</p>
<pre><code>x = torch.ones(3,3, requires_grad = True)  # 연산 정보 추적할 수 있게 True로 지정
print(x)</code></pre><pre><code>tensor([[1., 1., 1.],
     [1., 1., 1.],
     [1., 1., 1.]], requires_grad=True)</code></pre></li>
<li><p>연산 추가</p>
</li>
</ol>
<ul>
<li>add 연산 추가<pre><code>y = x + 5  # grad_fn=&lt;AddBackward0&gt;
print(y)</code></pre><pre><code>tensor([[6., 6., 6.],
      [6., 6., 6.],
      [6., 6., 6.]], grad_fn=&lt;AddBackward0&gt;)</code></pre></li>
<li>Mul, mean 연산 추가<pre><code>z = y * y   # grad_fn=&lt;MulBackward0&gt;
out = z.mean()  # grad_fn=&lt;MeanBackward0&gt;
print(z, out)</code></pre><pre><code>tensor([[36., 36., 36.],
      [36., 36., 36.],
      [36., 36., 36.]], grad_fn=&lt;MulBackward0&gt;) 
tensor(36., grad_fn=&lt;MeanBackward0&gt;)</code></pre></li>
</ul>
<ol start="3">
<li>역전파 계산 : <code>.backward()</code></li>
</ol>
<ul>
<li><code>.backward()</code> : 역전파 계산 <pre><code>print(out)
out.backward()</code></pre><code>tensor(36., grad_fn=&lt;MeanBackward0&gt;)</code></li>
</ul>
<ol start="4">
<li>미분값 저장 : <code>.grad</code></li>
</ol>
<ul>
<li>data가 거쳐온 layer에 대한 미분값 저장<pre><code>print(x) # x의 원래 값
print(x.grad)  # x의 미분 값 출력</code></pre><pre><code>tensor([[1., 1., 1.],
      [1., 1., 1.],
      [1., 1., 1.]], requires_grad=True)
tensor([[1.3333, 1.3333, 1.3333],
      [1.3333, 1.3333, 1.3333],
      [1.3333, 1.3333, 1.3333]])</code></pre></li>
</ul>
<h4 id="다른-예시">다른 예시</h4>
<pre><code>x = torch.randn(3, requires_grad=True)

y = x * 2
while y.data.norm() &lt; 1000:
    y = y * 2

print(y)</code></pre><p><code>tensor([-393.4280, 1086.7229,   68.0228], grad_fn=&lt;MulBackward0&gt;)</code></p>
<pre><code>v = torch.tensor([0.1, 1.0, 0.0001], dtype = torch.float)
y.backward(v)  # v를 기준으로 backward 

print(x.grad) # v 텐서를 기준으로 변경해줌</code></pre><p><code>tensor([2.0480e+02, 2.0480e+03, 2.0480e-01])</code></p>
<h4 id="2-기울기-업데이트-중지--with-torchno_grad">(2) 기울기 업데이트 중지 : with torch.no_grad()</h4>
<ul>
<li>기록을 추적하는 것을 방지하기 위해 코드 블럭을 with torch.no_grad()로 감싸면 기울기 계산은 필요없지만</li>
<li>requires_grad=True로 설정되어 학습 가능한 매개변수를 갖는 모델을 평가(evaluate)할 때 유용<pre><code>print(x.requires_grad)       # true/false 출력 (현재는 True 상태)
print((x**2).requires_grad)  # 제곱에 대해 출력
</code></pre></li>
</ul>
<p>with torch.no_grad():              # with로 감싼 코드에서는 기울기 계산 하지 않음
    print((x**2).requires_grad)    # Flase가 출력됨</p>
<pre><code>&gt;True
True
False

### (3) 기록을 추적하는 것을 중단 : .detach()
- 연산기록으로부터 분리
- `require_grad`가 다른 새로운 Tensor를 가져올 때</code></pre><p>print(x.requires_grad)  # True 상태</p>
<p>y = x.detach()          # x를 detach한 것을 y로 지정
print(y.requires_grad)  # False 출력됨</p>
<p>print(x.eq(y).all()) # x.eq(y) : x=y?</p>
<pre><code>&gt;True
False
tensor(True)

## 3. 자동 미분 흐름 예제
- 계산 흐름
a→b→c→out
![](https://velog.velcdn.com/images/ssom_d/post/8c8e5d0a-1f78-4ffa-8f1f-17d681103452/image.png)
- `backward()`를 통해  a←b←c←out 을 계산하면  ∂out/∂a 값이 `a.grad`에 채워짐






























</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[파이토치(PyTorch) 한번에 끝내기 : (1) 텐서(Tensors)]]></title>
            <link>https://velog.io/@ssom_d/%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98Pytorch-%ED%95%9C%EB%B2%88%EC%97%90-%EB%81%9D%EB%82%B4%EA%B8%B0</link>
            <guid>https://velog.io/@ssom_d/%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98Pytorch-%ED%95%9C%EB%B2%88%EC%97%90-%EB%81%9D%EB%82%B4%EA%B8%B0</guid>
            <pubDate>Thu, 02 Mar 2023 07:17:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>본 포스트는 이수안컴퓨터연구소님의 <a href="https://www.youtube.com/watch?v=k60oT_8lyFw&amp;t=4351s">파이토치 한번에 끝내기 PyTorch Full Tutorial Course</a> 강의를 듣고 작성되었습니다.</p>
</blockquote>
<h1 id="파이토치pytorch">파이토치(Pytorch)</h1>
<blockquote>
<ul>
<li>페이스북이 초기 루아(Lua) 언어로 개발된 토치(Torch)를 파이썬 버전으로 개발하여 2017년도에 공개</li>
</ul>
</blockquote>
<ul>
<li>초기에 토치(Torch)는 넘파이(NumPy) 라이브러리처럼 과학 연산을 위한 라이브러리로 공개</li>
<li>이후 GPU를 이용한 텐서 조작 및 동적 신경망 구축이 가능하도록 딥러닝 프레임워크로 발전시킴</li>
</ul>
<h1 id="파이토치-모듈-구조">파이토치 모듈 구조</h1>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/7225c670-c5c2-43f8-bd7c-859bd5ef8751/image.png" alt=""></p>
<h1 id="파이토치-구성요소">파이토치 구성요소</h1>
<blockquote>
<ul>
<li><code>torch</code> : 메인 네임스페이스, 텐서 등의 다양한 수학 함수가 포함</li>
</ul>
</blockquote>
<ul>
<li><code>torch.autograd</code> : 자동 미분 기능을 제공하는 라이브러리</li>
<li><code>torch.nn</code> : 신경망 구축을 위한 데이터 구조나 레이어 등의 라이브러리</li>
<li><code>torch.multiprocessing</code> : 병럴처리 기능을 제공하는 라이브러리</li>
<li><code>torch.optim</code> : SGD(Stochastic Gradient Descent)를 중심으로 한 파라미터 최적화 알고리즘 제공</li>
<li><code>torch.utils</code> : 데이터 조작 등 유틸리티 기능 제공</li>
<li><code>torch.onnx</code> : ONNX(Open Neural Network Exchange), 서로 다른 프레임워크 간의 모델을 공유할 때 사용</li>
</ul>
<h1 id="1-텐서tensors">1. 텐서(Tensors)</h1>
<ul>
<li>데이터 표현을 위한 기본 구조로 텐서(tensor)를 사용</li>
<li>텐서는 데이터를 담기위한 컨테이너(container)로서 일반적으로 수치형 데이터를 저장</li>
<li>넘파이(NumPy)의 ndarray와 유사</li>
<li>GPU를 사용한 연산 가속 가능
<img src="https://velog.velcdn.com/images/ssom_d/post/371abebf-98f8-4567-a0aa-de41d366b977/image.png" alt=""></li>
</ul>
<h1 id="11-텐서-초기화와-데이터-타입">1.1 텐서 초기화와 데이터 타입</h1>
<h2 id="1-텐서-초기화">[1] 텐서 초기화</h2>
<h3 id="1-초기화-되지-않은-텐서--torchempty">(1) 초기화 되지 않은 텐서 : torch.empty()</h3>
<ul>
<li>랜덤한 기존 형태 값으로 출력<pre><code>x = torch.empty(4,2)</code></pre><blockquote>
<p>tensor([[-6.1985e+32,  4.5848e-41],</p>
<pre><code>  [ 1.6558e+01,  0.0000e+00],
  [ 4.4842e-44,  0.0000e+00],
  [ 1.7937e-43,  0.0000e+00]])</code></pre></blockquote>
</li>
</ul>
<h3 id="2-무작위-초기화된-텐서--torchrand">(2) 무작위 초기화된 텐서 : torch.rand()</h3>
<pre><code>x = torch.rand(4,2)</code></pre><blockquote>
<p>tensor([[0.1663, 0.9950],
        [0.8520, 0.5015],
        [0.7387, 0.0313],
        [0.8601, 0.9957]])</p>
</blockquote>
<h3 id="3-데이터-타입이-long정수이며-0으로-채워진-텐서--torchzeros42-dtypetorchlong">(3) 데이터 타입이 long(정수)이며 0으로 채워진 텐서 : torch.zeros(4,2, dtype=torch.long)</h3>
<ul>
<li>0으로 초기화</li>
<li>long type : 정수형<pre><code>x = torch.zeros(4,2, dtype = long)</code></pre><blockquote>
<p>tensor([[0, 0],</p>
<pre><code>  [0, 0],
  [0, 0],
  [0, 0]])</code></pre></blockquote>
</li>
</ul>
<h3 id="4-사용자가-입력한-값으로-텐서-초기화--torchtensor323">(4) 사용자가 입력한 값으로 텐서 초기화 : torch.tensor([3,2,3])</h3>
<pre><code>x = torch.tensor([3,2,3])</code></pre><blockquote>
<p>tensor([3.0000, 2.3000])</p>
</blockquote>
<h3 id="5-1로-채워진-텐서--double-타입--xnew_ones24-dtypetorchdouble">(5) 1로 채워진 텐서 + double 타입 : x.new_ones(2,4, dtype=torch.double)</h3>
<ul>
<li>new_ones : 1로 채워진 텐서</li>
<li>double : 실수형<pre><code>x = x.new_ones(2,4, dtype = torch.double)</code></pre><blockquote>
<p>tensor([[1., 1., 1., 1.],</p>
<pre><code>  [1., 1., 1., 1.]], dtype=torch.float64)</code></pre></blockquote>
</li>
</ul>
<h3 id="6-지정된-범위로-tensor-생성--torcharangestart-end-step">(6) 지정된 범위로 tensor 생성 : torch.arange(start, end, step)</h3>
<pre><code># end만 지정
a = torch.arange(5)

# start, end 지정
a = torch.arange(2, 6)

# start, end, step 모두 지정
a = torch.arange(1, 10, 2)
</code></pre><blockquote>
<p>tensor([0, 1, 2, 3, 4])
tensor([2, 3, 4, 5])
tensor([1, 3, 5, 7, 9])</p>
</blockquote>
<h3 id="7-x와-같은-크기-float-타입-무작위-텐서--torchrandn_like">(7) x와 같은 크기, float 타입, 무작위 텐서 : torch.randn_like()</h3>
<ul>
<li>randn : 무작위</li>
<li>like : 기존 텐서 모양과 같게<pre><code>x = torch.randn_like(x, dtype = torch.float)</code></pre><blockquote>
<p>tensor([[-0.1523, -0.0642, -0.3455, -0.2723],</p>
<pre><code>  [ 1.3314,  1.1569, -0.0211,  0.8774]])</code></pre></blockquote>
</li>
</ul>
<h3 id="8-텐서-크기-확인--xsize">(8) 텐서 크기 확인 : x.size()</h3>
<pre><code>print(x.size())</code></pre><blockquote>
<p>torch.Size([2, 4])</p>
</blockquote>
<h2 id="2-데이터-타입">[2] 데이터 타입</h2>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/948ef9ff-30c7-41e4-96d0-2f7ed03631e1/image.png" alt=""></p>
<pre><code># float type
ft = torch.FloatTensor([1,2,3])
print(ft)

# type 변환
print(ft.short())
print(ft.int())     # dtype=torch.int16
print(ft.long())    # dtype=torch.int32</code></pre><blockquote>
<p>tensor([1., 2., 3.])
  tensor([1, 2, 3], dtype=torch.int16)
  tensor([1, 2, 3], dtype=torch.int32)
  tensor([1, 2, 3])</p>
</blockquote>
<pre><code># int type
it = torch.IntTensor([1,2,3])
print(it)

# type 변환
print(it.float())
print(it.double())  # dtype=torch.float64
print(it.half())    # dtype=torch.float16</code></pre><blockquote>
<p>tensor([1, 2, 3], dtype=torch.int32)
  tensor([1., 2., 3.])
  tensor([1., 2., 3.], dtype=torch.float64)
  tensor([1., 2., 3.], dtype=torch.float16)</p>
</blockquote>
<h1 id="12-cuda-tensors--device">1.2 CUDA Tensors : device</h1>
<ul>
<li>텐서를 cpu, gpu 장치로 옮기기</li>
</ul>
<pre><code>x = torch.randn(1)

# cuda가 가능하면(is_available()) gpu, 안되면 cpu로 자동 연결
device = torch.device(&#39;cuda&#39; if torch.cuda.is_available() else &#39;cpu&#39;)
print(device)</code></pre><blockquote>
<p>cuda</p>
</blockquote>
<ul>
<li><code>.to</code> 이용해서 device 보냄<pre><code># 기존 x 모양으로 1로 전부 차있는 것에 device 정의 
y = torch.ones_like(x, device = device)
print(y)
</code></pre></li>
</ul>
<h1 id="랜덤으로-선언했던-x-텐서를-device로-보냄">랜덤으로 선언했던 x 텐서를 device로 보냄</h1>
<p>x = x.to(device)</p>
<h1 id="z를-cpu로-옮기고-type은-doublefloat64로-지정">z를 cpu로 옮기고 type은 double(float64)로 지정</h1>
<p>z = x+y
print(z)
print(z.to(&#39;cpu&#39;, dtype = tensor.double))</p>
<pre><code>
&gt;tensor([1.], device=&#39;cuda:0&#39;)
tensor([2.0479], device=&#39;cuda:0&#39;)
tensor([3.0479], device=&#39;cuda:0&#39;)
tensor([3.0479], dtype=torch.float64)



# 1.3 다차원 텐서 생성

### (1) 0D Tensor (=Scalar)
- 하나의 숫자를 담고 있는 텐서
- 축과 형상 없음</code></pre><p>t0 = torch.tensor(0)
print(t0.ndim)  # 차원
print(t0.shape) # 크기
print(t0)       # 실제값</p>
<pre><code>&gt;0
torch.Size([])
tensor(0)

### (2) 1D Tensor (=Vector)
- 리스트와 유사
- 하나의 축</code></pre><p>t1 = torch.tensor([1,2,3])
print(t1.ndim)
print(t1.shape)
print(t1)</p>
<pre><code>&gt;1
torch.Size([3])
tensor([1, 2, 3])

### (3) 2D Tensor (=Matrix)
- 행렬 모양
- 두개의 축
- 구조 : 특성(feature) + 샘플(smaples)
- ex) 수치, 통계 데이터 셋
![](https://velog.velcdn.com/images/ssom_d/post/2ea14db4-5878-4bd6-8707-3d2aae9b1d3e/image.png)
</code></pre><p>t2 = torch.tensor([[1,2,3],
                  [4,5,6],
                  [7,8,9]])
print(t2.ndim)
print(t2.shape)
print(t2)</p>
<pre><code>&gt;2
torch.Size([3, 3])
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])


### (4) 3D Tensor
- 큐브(cube) 모양, 3개의 축
- 구조 : 특성(features) + 샘플(samples) + 타입스텝(timesteps)
- 연속된 시퀀스 데이터, (시간 축이 포함된)시계열 데이터에 해당
- ex) 주식 가격 데이터셋, 시간에 따른 질병 발병 데이터 등
![](https://velog.velcdn.com/images/ssom_d/post/4a21c794-c465-4b88-ba89-e5c0a3e70e06/image.png)
</code></pre><p>t3 = torch.tensor([[[1,2,3],
                    [4,5,6],
                    [7,8,9]],
                   [[1,2,3],
                    [4,5,6],
                    [7,8,9]],
                   [[1,2,3],
                    [4,5,6],
                    [7,8,9]]])
print(t3.ndim)
print(t3.shape)
print(t3)</p>
<pre><code>&gt;3
torch.Size([3, 3, 3])
tensor([[[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]],
        [[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]],
        [[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]]])

### (5) 4D Tensor
- 4개의 축
- 컬러 이미지 데이터   (흑백은 3D Tensor로 가능)
- 구조 : 샘플(smaples) + 높이(height) + 너비(width) + 컬러 채널(channel)
![](https://velog.velcdn.com/images/ssom_d/post/1e9804e2-8045-4bb0-be06-3fceaeb85506/image.png)


### (6) 5D Tensor
- 5개의 축
- 비디오 데이터  (이미지가 연달아 있는 데이터)
- 구조 : 샘플(samples) + 프레임(frames) + 높이(height) + 너비(width) + 컬러 채널(channel)



# 1.4 텐서의 연산 (Operations)
- 텐서에 대한 수학 연산, 삼각함수, 비트 연산, 비교 연산, 집계 등 제공
### (1) math</code></pre><p>import math</p>
<p>a = torch.rand(1,2) * 2 - 1</p>
<pre><code>- `torch.abs(a)` : 절댓값
- `torch.ceil(a)`  : 반올림
- `torch.floor(a)` : 반내림
- `torch.clamp(a, -0.5,0.5)` : 최대최소를 찝어버린다 (clamp)
    =&gt; tensor([[0.5000, 0.5000]])
- `torch.min(a)` : 최소
- `torch.max(a)` : 최대
- `torch.mean(a)` : 평균
- `torch.std(a)` : 분산
- `torch.prod(a)` : 곱
- `torch.unique(torch.tensor([1,2,3,1,2,2]))` : 종류
   =&gt; tensor([1, 2, 3])

(1.1) dim 인자(max,min) : argmax,argmin 리턴
- argmax : 최대값을 가진 인덱스
- argmin : 최소값을 가진 인덱스</code></pre><p>x = torch.rand(2,2)
print(x)
print(x.max(dim = 0))  # dim=0 : 열 기준 , max() : 더 큰 인덱스 
print(x.min(dim = 1))  # dim=1 : 행 기준 , max() : 더 큰 인덱스 </p>
<pre><code>&gt;tensor([[0.7574, 0.0808],
        [0.0846, 0.1804]])

&gt;torch.return_types.max(
values=tensor([0.7574, 0.1804]),
indices=tensor([0, 1]))

&gt;torch.return_types.max(
values=tensor([0.7574, 0.1804]),
indices=tensor([0, 1]))


### (2) torch.연산</code></pre><p>x = torch.rand(2,2)
y = torch.rand(2,2)</p>
<pre><code>- `torch.add(x,y)` : 덧셈
- `torch.sub(x,y)` : 뺄셈
- `torch.mul(x,y)` : 곱셈
- `torch.div(x,y)` : 나눗셈

- `torch.mm(x,y)` : 내적</code></pre><h2 id="내적-예시">내적 예시</h2>
<p>print(x)
print(y)
print(torch.matmul(x,y))</p>
<p>z = torch.mm(x,y)
print(z)</p>
<p>print(torch.svd(z)) # U,S,V 로 기존의 행렬 값을 분해</p>
<pre><code></code></pre><p>tensor([[0.7431, 0.2229],
        [0.9548, 0.4806]])
tensor([[0.8347, 0.3137],
        [1.3998, 0.7706]])
tensor([[0.9323, 0.4049],
        [1.4698, 0.6699]])
tensor([[0.9323, 0.4049],
        [1.4698, 0.6699]])
torch.return_types.svd(
U=tensor([[-0.5326, -0.8464],
        [-0.8464,  0.5326]]),
S=tensor([1.9084, 0.0154]),
V=tensor([[-0.9120, -0.4101],
        [-0.4101,  0.9120]]))</p>
<pre><code>### (3) 결과 텐서 인자로 제공하는 법</code></pre><p>result = torch.empty(2,4)
torch.add(x,y, out = result)
print(result)</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/ssom_d/post/5329f5cb-666e-4765-82e9-c22a337c801d/image.png)


### (4) in-place : 텐서 값 변경
- 연산 뒤에 &quot;_&quot; 붙이기
- `x.copy_(y)
- `x.t_()`</code></pre><p>print(x)
print(y) 
y.add_(x)   # _ : inplace =&gt; &#39;x 더한 값&#39;을 y로 다시 지정
print(y)</p>
<pre><code></code></pre><p>tensor([[0.7431, 0.2229],
        [0.9548, 0.4806]])
tensor([[0.0917, 0.0908],
        [0.4450, 0.2899]])
tensor([[0.8347, 0.3137],
        [1.3998, 0.7706]])</p>
<pre><code>

# 1.5 텐서의 조작 (Manipulations)

### (1) 인덱싱(Indexing)
- numpy 형태로 사용 가능</code></pre><h2 id="텐서의-특정-위치-값-가져오는-법">텐서의 특정 위치 값 가져오는 법</h2>
<p>x = torch.Tensor([[1,2],
                  [3,4]])
print(x)</p>
<h1 id="행렬-위치로-값-추출">행렬 위치로 값 추출</h1>
<p>print(x[0,0])
print(x[0,1])
print(x[1,0])
print(x[1,1])</p>
<h1 id="슬라이싱">슬라이싱</h1>
<p>print(x[:,0])  # 행은 다 선택하면서 0번째 컬럼 선택 
print(x[:,1])
print(x[0,:]) # 열을 슬라이싱하고 행을 선정
print(x[1,:])</p>
<pre><code>&gt;tensor([[1., 2.],
        [3., 4.]])
tensor(1.)
tensor(2.)
tensor(3.)
tensor(4.)
tensor([1., 3.])
tensor([2., 4.])
tensor([1., 2.])
tensor([3., 4.])


### (2) 텐서의 크기(size)나 모양(shape) 변경 : view
`view`
- 변경 전,후 텐서 안 원소 개수 유지되어야함
- -1 설정 시, 계산 통해 해당 크기 값 유추</code></pre><p>x = torch.randn(4,5)</p>
<p>y = x.view(20)  # 20개가 나열된 형태로 변경되어 출력</p>
<p>z = x.view(5,-1) # 행 5개, -1 : 나머지는 알아서 계산해서 넣어  # 5,4로 출력됨</p>
<pre><code></code></pre><p>tensor([[ 0.1870,  0.6372,  0.2561, -1.3911,  0.8974],
        [ 0.8734,  0.5315, -0.4903, -0.4616, -0.3950],
        [ 0.4581, -0.1911, -1.6286,  0.5659, -1.8072],
        [-1.9535,  0.2897, -0.4601,  0.5018,  1.1456]])
tensor([ 0.1870,  0.6372,  0.2561, -1.3911,  0.8974,  0.8734,  0.5315, -0.4903,
        -0.4616, -0.3950,  0.4581, -0.1911, -1.6286,  0.5659, -1.8072, -1.9535,
         0.2897, -0.4601,  0.5018,  1.1456])
tensor([[ 0.1870,  0.6372,  0.2561, -1.3911],
        [ 0.8974,  0.8734,  0.5315, -0.4903],
        [-0.4616, -0.3950,  0.4581, -0.1911],
        [-1.6286,  0.5659, -1.8072, -1.9535],
        [ 0.2897, -0.4601,  0.5018,  1.1456]])</p>
<pre><code>### (3) 실제값 출력 : item
- 단, 스칼라 값이 하나만 존재해야 사용 가능 (2개 이상부터 에러)
`item`</code></pre><p>x = torch.randn(1)
print(x)
print(x.item())
print(x.dtype)</p>
<pre><code>&gt;tensor([-1.7272])
-1.7272114753723145
torch.float32

### (4) 차원 축소(제거) : squeeze</code></pre><p>tensor = torch.rand(1,3,3)
print(tensor.shape)</p>
<p>t = tensor.squeeze()<br>print(t.shape)   </p>
<pre><code>&gt;torch.Size([1, 3, 3])
torch.Size([3, 3])   ## 차원이 축소됨


### (5) 차원 증가(생성) : unsqueeze
- dim 인자
   - unsqueeze(dim=0) : 첫번째 차원을 기준으로 차원 증가
   - unsqueeze(dim=1) : 뒤에 추가해서 차원 증가</code></pre><p>tensor = torch.rand(3,3)
print(tensor.shape)</p>
<p>t = tensor.unsqueeze(dim=0) 
print(t.shape)</p>
<pre><code>&gt;torch.Size([3, 3])
torch.Size([1, 3, 3])  #첫번째 차원을 기준으로 차원이 증가됨


### (6) 텐서 결합 : stack, cat
1. `stack`</code></pre><p>x = torch.FloatTensor([1,4])
y = torch.FloatTensor([2,5])
z = torch.FloatTensor([3,6])</p>
<h1 id="텐서-결합">텐서 결합</h1>
<p>print(torch.stack([x,y,z]))</p>
<pre><code>&gt;tensor([[1., 4.],
        [2., 5.],
        [3., 6.]])

2. `cat`
- 텐서를 결합하는 메소드(concat)
- 넘파이의 `stack`과 유사하지만 쌓을 `dim` 존재
- 해당 차원을 늘려준 후 결합



- 차원 기준 텐서 결합 (첫번째 차원)</code></pre><p>a = torch.randn([1,3,3])
b = torch.randn([1,3,3])</p>
<h2 id="차원-기준-텐서-결합-첫번째-차원">차원 기준 텐서 결합 (첫번째 차원)</h2>
<p>c = torch.cat((a,b), dim = 0)  # dim=0 : 첫번째 차원을 기준으로 결합
print(c)
print(c.size())   # 결과 : torch.Size([2, 3, 3])</p>
<pre><code></code></pre><p>tensor([[[ 1.7086,  1.7309,  1.4096],
         [ 0.0378, -0.8366,  1.3575],
         [ 0.7722, -0.5331, -0.2113]],
        [[-0.3134,  1.9430,  1.1301],
         [ 0.3056,  1.4749,  1.5296],
         [ 0.7489,  0.9423,  0.2366]]])
torch.Size([2, 3, 3])</p>
<pre><code>
- 차원 기준 텐서 결합 (두번째 차원)</code></pre><p>c = torch.cat((a,b), dim=1)  # dim=1 : 두번째 차원을 기준으로 결합
print(c)
print(c.size()) # 결과 : torch.Size([1, 6, 3])</p>
<pre><code></code></pre><p>tensor([[[ 1.7086,  1.7309,  1.4096],
         [ 0.0378, -0.8366,  1.3575],
         [ 0.7722, -0.5331, -0.2113],
         [-0.3134,  1.9430,  1.1301],
         [ 0.3056,  1.4749,  1.5296],
         [ 0.7489,  0.9423,  0.2366]]])
torch.Size([1, 6, 3])</p>
<pre><code>- 차원 기준 텐서 결합 (세번째 차원)</code></pre><p>c = torch.cat((a,b), dim=2)  # dim=2 : 세번째 차원을 기준으로 결합
print(c)
print(c.size()) # 결과 : torch.Size([1, 3, 6])</p>
<pre><code></code></pre><p>tensor([[[ 1.7086,  1.7309,  1.4096, -0.3134,  1.9430,  1.1301],
         [ 0.0378, -0.8366,  1.3575,  0.3056,  1.4749,  1.5296],
         [ 0.7722, -0.5331, -0.2113,  0.7489,  0.9423,  0.2366]]])
torch.Size([1, 3, 6])</p>
<pre><code>### (7) 텐서를 여러 개로 나누기 : chunk, split

1. `chunk`
- 몇개로 나눌 것인가? 정의</code></pre><p>tensor = torch.rand(3,6)
print(tensor)</p>
<p>t1,t2,t3 = torch.chunk(tensor, 3, dim=1)</p>
<h1 id="첫번쨰-차원을-기준으로-3개로-나눔">첫번쨰 차원을 기준으로 3개로 나눔</h1>
<p>print(t1)
print(t2)
print(t3)</p>
<pre><code></code></pre><p>tensor([[0.5286, 0.2108, 0.0335, 0.2943, 0.8410, 0.4693],
        [0.3923, 0.1196, 0.1436, 0.3561, 0.2415, 0.0414],
        [0.9088, 0.4601, 0.1271, 0.7551, 0.6036, 0.3934]])
tensor([[0.5286, 0.2108],
        [0.3923, 0.1196],
        [0.9088, 0.4601]])
tensor([[0.0335, 0.2943],
        [0.1436, 0.3561],
        [0.1271, 0.7551]])
tensor([[0.8410, 0.4693],
        [0.2415, 0.0414],
        [0.6036, 0.3934]])</p>
<pre><code>
2. `split`
- 텐서의 크기는 몇인지 물어본 후, 그에 맞춰 나눔</code></pre><p>tensor = torch.rand(3,6)
t1, t2 = torch.split(tensor, 3, dim=1) </p>
<p>print(tensor)
print(t1)
print(t2)</p>
<pre><code></code></pre><p>tensor([[0.0883, 0.4678, 0.1435, 0.6052, 0.9097, 0.4505],
        [0.3931, 0.1826, 0.0384, 0.2358, 0.7419, 0.0266],
        [0.3956, 0.3721, 0.3204, 0.4135, 0.3338, 0.3091]])
tensor([[0.0883, 0.4678, 0.1435],
        [0.3931, 0.1826, 0.0384],
        [0.3956, 0.3721, 0.3204]])
tensor([[0.6052, 0.9097, 0.4505],
        [0.2358, 0.7419, 0.0266],
        [0.4135, 0.3338, 0.3091]])</p>
<pre><code>



























</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 딥러닝 구조와 개념]]></title>
            <link>https://velog.io/@ssom_d/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B5%AC%EC%A1%B0%EC%99%80-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@ssom_d/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B5%AC%EC%A1%B0%EC%99%80-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Thu, 19 Jan 2023 11:53:04 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 딥러닝 호형님의 <a href="https://www.youtube.com/watch?v=iqRHcWLpQNI&amp;list=PLHOsBEAyYj3wC-dIxBCd7ywCTrMnwG1pC&amp;index=1">딥러닝 전체 흐름보기</a> 강의를 바탕으로 작성되었습니다.</p>
</blockquote>
<h2 id="1-머신러닝-학습-방법">1. 머신러닝 학습 방법</h2>
<ol>
<li>지도 학습 (supervised learning)</li>
<li>비지도 학습 (Unsupervised learning)</li>
<li>강화학습 (Reinforcement learning)</li>
</ol>
<h2 id="2-딥러닝">2. 딥러닝</h2>
<blockquote>
<h3 id="-딥러닝-전체-흐름-">[ 딥러닝 전체 흐름 ]</h3>
</blockquote>
<ol>
<li>문제 이해/Data 처리</li>
<li>학습 데이터 생성</li>
<li>모델 결정</li>
<li>모델 구축</li>
<li>예측값 산출</li>
<li>Loss 계산</li>
<li>parameter 업데이트</li>
<li>최적화</li>
</ol>
<hr>
<h2 id="span-stylecolorcornflowerblue1-문제-이해--무엇을-생각해야-하나span"><span style="color:CornflowerBlue">1. 문제 이해 : 무엇을 생각해야 하나?</span></h2>
<ol>
<li>원하는 <code>타겟</code>이 무엇인가?<ul>
<li>ex) 주가 예측, 불량 검출, 패션 디자인 등</li>
</ul>
</li>
<li>데이터는 어떻게 생겼는가?<ul>
<li>ex) 데이터 구조, 타입, 실시간, 크기 등</li>
</ul>
</li>
<li><code>딥러닝</code>이 꼭 필요한가?<ul>
<li>딥러닝은 만능이 아니다.</li>
<li>왜 예측이 잘되는지 설명이 어려움</li>
<li>성능 위주로 정확도로만은 받아들일 수 없음</li>
<li>오버헤드가 아닌지?</li>
</ul>
</li>
</ol>
<h2 id="span-stylecolorcornflowerblue12-데이터-처리--어떻게-가공feature-engineeringspan"><span style="color:CornflowerBlue">1.2 데이터 처리 : 어떻게 가공?(Feature Engineering)</span></h2>
<ol>
<li>예측 <code>방해 요소 확인</code><ul>
<li>결측값, 중복값, 오류, 오차, 다변수 등 </li>
<li>background knowledge가 필요 (+ 도메인 지식)</li>
</ul>
</li>
<li><code>데이터 구조 및 분포</code> 분석<ul>
<li>ex) 통계분석 - 상관관계, 히스토그램, 가설검증 등</li>
</ul>
</li>
<li><code>데이터 가공</code><ul>
<li>ex) Outlier 제거</li>
<li>feature selection, 변수 생성</li>
<li>scaling(Nomalization, minmax scaler, low sclaing...) 등</li>
</ul>
</li>
<li><code>데이터 형태 변환</code><ul>
<li>ex) labeling, one-hot-encoding(0,1로만 이루어짐) 등</li>
<li>ex) 년도,나이대를 0,1,2 등 그룹으로 묶기 </li>
<li>특정 class 잡아주기</li>
</ul>
</li>
</ol>
<h2 id="span-stylecolorcornflowerblue2-학습-데이터-생성--샘플링span"><span style="color:CornflowerBlue">2. 학습 데이터 생성 : 샘플링</span></h2>
<ol>
<li><code>편향 방지</code><ul>
<li>특정 데이터로 편중되어선 안됌.</li>
</ul>
</li>
<li>Cheating 금지<ul>
<li><code>test 데이터와 중복</code> 금지</li>
</ul>
</li>
<li><code>충분한</code> 데이터 양</li>
<li><code>샘플링 종류</code> 선택<ul>
<li>ex) 기본 random / under / stratified sampling 등</li>
<li>under sampling : calss 중 가장 적은 데이터를 기준으로 똑같은 개수로 뽑아 학습 데이터로 만듬</li>
<li>stratified sampling(추가 추출법) : 가지고 있는 데이터가 모집단이라 할때, 모집단의 class 비율과 똑같이 학습 데이터 만듬</li>
</ul>
</li>
<li>데이터 분할<ul>
<li>Train vs Test</li>
<li>Train. vs Validation. vs Test</li>
<li>Cross Validation
<img src="https://velog.velcdn.com/images/ssom_d/post/ebb81da2-4c7c-4e2c-839f-f299d41848e9/image.png" alt=""></li>
</ul>
</li>
</ol>
<h2 id="span-stylecolorcornflowerblue3-모델-결정--nn-cnn-rnn-ganspan"><span style="color:CornflowerBlue">3. 모델 결정 : (NN, CNN, RNN, GAN...)</span></h2>
<ol>
<li><p><code>어떤 종류</code>의 문제인가?</p>
<ul>
<li>regression, Classification, Clustering(비지도) 등...</li>
</ul>
</li>
<li><p><code>무엇을 최적화</code> 할 것인가?</p>
<ul>
<li>ex) 예측 시간 단축, 정확도 등 최적화의 목적 확인</li>
</ul>
</li>
<li><p>데이터가 <code>얼마나 큰가</code>?</p>
<ul>
<li>GPU 연산 유무, 하드웨어 성능 확인</li>
</ul>
</li>
<li><p>모델 종류</p>
<blockquote>
<ul>
<li>CNN
<img src="https://velog.velcdn.com/images/ssom_d/post/8df70e75-0a47-4dd3-b695-db1473bee8c5/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li>이미지, 자연어 처리 등</li>
</ul>
<blockquote>
<ul>
<li>RNN
<img src="https://velog.velcdn.com/images/ssom_d/post/77ec095f-9699-40e8-8e25-e823722f116d/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li>시계열 데이터</li>
</ul>
<blockquote>
<ul>
<li>GAN
<img src="https://velog.velcdn.com/images/ssom_d/post/3cac37fd-1fa0-4cfd-80c5-663eeb448cd2/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li>latent space로 가짜 데이터를 만들어 가짜/진짜 구별 안되게 학습</li>
</ul>
<blockquote>
<ul>
<li>AutoEncoder
<img src="https://velog.velcdn.com/images/ssom_d/post/32eb5c54-7844-43b1-ad4b-6ae833ff4d7c/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li>비지도 학습</li>
<li>레이블링이 없고 데이터를 넣으면 레이어를 거쳐 원본과 유사하게 데이터를 생성하는 모델</li>
</ul>
</li>
</ol>
<h2 id="span-stylecolorcornflowerblue4-모델-구축span"><span style="color:CornflowerBlue">4. 모델 구축</span></h2>
<ol>
<li><code>epoch</code>, <code>mini batch</code><ul>
<li>batch : data 1조각, train 데이터를 n 조각으로 쪼개 한조각씩 넣어줌.</li>
<li>epoch : 학습 횟수</li>
</ul>
</li>
<li><code>layer</code>, <code>Node</code>, <code>filter</code> 등 (수,크기 지정)
<img src="https://velog.velcdn.com/images/ssom_d/post/8023b850-ec3d-429a-b0b5-890f9f326233/image.png" alt=""><ul>
<li>input layer, hidden later, output layer</li>
<li>filter : layer 연결 선들이 metric 형태로 들어가 있는 것. filter의 크기,값 지정해야함, 초기값은 random</li>
</ul>
</li>
<li><code>loss function</code><ul>
<li>output 결과가 잘 되었는지 확인</li>
</ul>
</li>
<li><code>optimizer</code><ul>
<li>loss funnction을 계산하여 얼만큼 예측? 어떻게 업데이트? 하며 최적화 과정</li>
</ul>
</li>
</ol>
<h2 id="span-stylecolorcornflowerblue5-예측--outputspan"><span style="color:CornflowerBlue">5. 예측 : output</span></h2>
<ul>
<li>모델 구축해놓고 input만 넣으면 예측</li>
<li>중요한건 예측을 잘 했는가</li>
</ul>
<h2 id="span-stylecolorcornflowerblue6-loss-계산span"><span style="color:CornflowerBlue">6. Loss 계산</span></h2>
<ul>
<li><code>y</code> 실제값,  <code>ŷ</code> 예측값</li>
<li>ŷ 이 얼마나 예측을 잘했는가의 <code>기준</code>이 loss function</li>
<li>예측값이 어떠한 기준에 의해 loss를 계산</li>
<li>loss값이 <code>작아지게 하는 것</code>이 목표</li>
<li>학습 흐름
(loss 작아지게 하는게 목표) 
=&gt; input 값을 넣어 아웃풋 나오면 실제 값과 비교(loss(오차) 계산)해서 
=&gt; loss(오차)가 작아지게 하는 가중치값을 업데이트하여 
=&gt; 다시 input 넣고 다시 loss 계산해서 가중치 업데이트...반복</li>
</ul>
<h2 id="span-stylecolorcornflowerblue7-parameter-weight-updatespan"><span style="color:CornflowerBlue">7. Parameter Weight Update</span></h2>
<ul>
<li>업데이트 할 parameter <code>weight</code> 값을 구하는 것이 목표</li>
<li><code>역전파 (Backpropagation)</code><ul>
<li>loss function의 예시 그림
<img src="https://velog.velcdn.com/images/ssom_d/post/b1910934-6479-4d96-a371-9e5d381cdfd5/image.png" alt=""></li>
<li>loss function이 <code>가장 작은 지점</code>의 (θ0 , θ1) 값을 구하고자 함.</li>
<li>역전파를 통해 loss가 작아지는 weight값을 찾아가게 하는 것이 역전파 알고리즘.<ul>
<li>모델을 backward pass 거꾸로 올라가며 node의 기여도를 확인하여 더 나은 weight 값 찾기
<img src="https://velog.velcdn.com/images/ssom_d/post/9a21d733-ff5d-4c82-a005-80565f67bedb/image.png" alt=""></li>
</ul>
</li>
<li>W 값들을 전부 역전파를 통해 업데이트 해줌</li>
</ul>
</li>
</ul>
<h2 id="span-stylecolorcornflowerblue8-optimizerspan"><span style="color:CornflowerBlue">8. Optimizer</span></h2>
<h4 id="파라미터를-업데이트-하는-방법">[파라미터를 업데이트 하는 방법]</h4>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/015ad1f1-5498-41a1-91e1-75ce3241a83c/image.png" alt=""></p>
<ul>
<li><code>경사하강법 (gradient descent)</code><ul>
<li>기본적인 형태</li>
<li>(미분) 기울기 값을 통해 작아지는 방향으로 찾아가게끔 만들어주는 것.</li>
<li>α : learning rate, 기울기 방향으로 갈때 걸음 수 (좁게,넓게)</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/8d58b434-a1d7-4035-8a96-6697bc82f22b/image.png" alt=""></p>
<ul>
<li>기본 형태를 기준으로 다양한 optimizer가 나옴</li>
</ul>
<h2 id="span-stylecolorcornflowerblue9-최적화-진단--모델-튜닝span"><span style="color:CornflowerBlue">9. 최적화 (진단) : 모델 튜닝</span></h2>
<ol>
<li><code>loss/정확도</code> 안좋을 경우 조절<ul>
<li><code>learning rate</code> 
: 너무 작은 경우 조금씩 가다가 글로벌 미니멈까지 가기 전에 끝날 수도
: 너무 큰 경우 큼직큼직 걷다가 글로벌 미니멈을 지나쳐버릴 수도..</li>
<li><code>optimizer</code> : 다양한 optimizer 방법 사용</li>
<li><code>batch</code> : 몇개씩 data 넣을지</li>
<li><code>filter</code> : 크기,수</li>
<li><code>layer</code> : 수</li>
<li><code>node</code> : 얼마나 가져갈지</li>
<li><code>activation function</code> 
: 한 라인이 1차 결합(W*X+bias등)으로 들어감. 
: 실제 데이터가 전부 linear 한 관계가 아니기 때문에 
: layer에서 layer로 넘어갈때 linear함을 non linear함으로 바꿔줌</li>
<li>etc..</li>
</ul>
</li>
<li><code>overfitting</code> 방지<ul>
<li><code>early stopping</code></li>
<li><code>regularization</code> : loss function이 완전히 작아지지 않게끔</li>
<li><code>dropout</code> : node의 일부를 죽여서 과적합 방지</li>
<li>etc..</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 딥러닝 신경망 알고리즘 이해하기]]></title>
            <link>https://velog.io/@ssom_d/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%8B%A0%EA%B2%BD%EB%A7%9D-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ssom_d/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%8B%A0%EA%B2%BD%EB%A7%9D-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 18 Jan 2023 11:12:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이 글은 데이터 스테이션님의 <a href="https://www.youtube.com/watch?v=VIOyNXMJiew">딥러닝 신경망 알고리즘 이해하기 !</a> 강의를 듣고 작성되었습니다.</p>
</blockquote>
<h1 id="1-신경망-알고리즘">1. 신경망 알고리즘</h1>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/5ccd4d34-68c8-45ca-be06-76002bbcaedd/image.png" alt=""></p>
<ol>
<li>layer (층) : 노드 한줄</li>
<li>Node (노드) </li>
<li>Weight (가중치)</li>
</ol>
<ul>
<li>비정형(저차원) 데이터를 처리할때 쓰임</li>
</ul>
<h1 id="2-신경망-알고리즘-기본-작동-원리">2. 신경망 알고리즘 기본 작동 원리</h1>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/57c01f57-9c50-41f5-a274-ed0653f35412/image.png" alt=""></p>
<h2 id="1-네트워크-layer의-기능-및-역할">1) 네트워크 (Layer)의 기능 및 역할</h2>
<ul>
<li><p>데이터 연산이 처리되는 각 층을 연결</p>
</li>
<li><p>층간 활성함수에 의한 연산으로 다양하고 복잡한 형태의 계산이 가능</p>
</li>
<li><p><code>점진적(Foward pass)</code>으로 데이터가 정제되어 처리될 수 있는 구조 형성</p>
</li>
<li><p>층(layer)에서 입력 데이터(input data)가 처리되는 정보는 <code>Weight(해당 layer의 parameter)</code>라는 Vector에 저장되어 있음</p>
<blockquote>
<p><strong>딥러닝의 목표</strong> 
: 예측을 정확하게 하기 위한 <strong>Weight</strong>를 찾는 것</p>
<blockquote>
<p><em>정답지가 연속형,이산형,카테고리형 등에 따라 어떤 방식으로 weight를 찾을지 결정</em>.</p>
</blockquote>
</blockquote>
</li>
<li><p><code>Backpropagation(역전파) 알고리즘</code>을 구현한 <code>Optimizer</code>를 이용해 Update</p>
</li>
<li><p>Training Loop를 통해, 최초의 부여받은 <code>Random Weight</code>에서 <code>Cost Function</code>이 가장 낮아지는 Weight를 도출</p>
</li>
</ul>
<blockquote>
<p><strong>손실함수 (Cost Function or Objective Function)</strong></p>
</blockquote>
<ul>
<li><strong>예측값</strong>과 <strong>실제 값의 차이(오차)</strong>를 계산한 함수. </li>
<li>신경망 출력 제어의 지표가 됨.</li>
<li>신경망이 얼마나 잘 만들어졌는가, 잘만들어 지고 있는가를 파악할 수 있음</li>
<li>손실함수가 <strong>최소</strong>가 되는 방향으로 weight를 Update</li>
</ul>
<h3 id="우리가-딥러닝nn-사용할-때-집중해야할-부분">&lt; 우리가 딥러닝(NN) 사용할 때 집중해야할 부분 &gt;</h3>
<ol>
<li>중간에 update될 weight</li>
<li>weight에 의해서 계산될 손실함수가 어떤 식으로 바뀌는지</li>
<li>정했던 데이터가 이산형,연속형,카테고리형이냐에 따라 손실 함수를 어떻게 정희해야 하는가</li>
</ol>
<blockquote>
<h3 id="처리-순서">처리 순서</h3>
</blockquote>
<ol>
<li>여러개의 Batch를 나눠 학습 (몇 번 반복할 것인가 결정 : Epoch)</li>
<li>데이터가 각 층을 통과하며, Node에 있는 함수에 의해 처리 (Forward Pass)</li>
<li>실측값과 신경망에 의한 예측값을 비교해 오차 계산</li>
<li>chain Rule을 통해 오차에 대한 각 Node에 있는 기여도를 계산 (Backward Pass)</li>
<li>오차가 감소하도록 Weight를 계산 </li>
</ol>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/8c3d1c1f-df73-4e42-b5db-240c8c0f41f2/image.png" alt=""></p>
<h1 id="3-데이터와-알고리즘">3. 데이터와 알고리즘</h1>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/71ef9fcc-fdba-4199-b8ca-708e53aa348f/image.png" alt=""></p>
<ul>
<li><p>Perceptron Model</p>
<ul>
<li>초기 신경망 모델</li>
<li>input layer과 하나의 Hidden Layer와 Output Layer로 구성되어 있으며, 초기 Perceptron Model은 층이 하나 뿐인 Threshold Logic Unit으로 구성</li>
</ul>
</li>
<li><p>Multi Layer Perceptron</p>
<ul>
<li>perceptron 구조를 여러층으로 쌓아올린 신경망 알고리즘</li>
<li>하나 이상의 Hidden Layer로 구성</li>
<li>기존의 perceptron이 가지고 있는 한계를 개선 (단순한 문제에서 발생하는 오류)</li>
</ul>
</li>
<li><p>Deep Neural Network, DNN</p>
<ul>
<li>Hidden Layer를 여러 겹 쌓아올린 신경망</li>
<li>역전파(BackPropagation)알고리즘을 통해 훈련 방법을 개선</li>
<li>네트워크를 데이터가 통과하면서, 각 층에 있는 HyperParameter를 계산</li>
<li>손실함수에 의한 오차를 다시 노드의 기여도로 거꾸로 계산해 나가며(역전파,BackPropagaion) Hidden Layer를 새로 Update 시켜주는 알고리즘</li>
<li>일반적으로 우리가 알고있는 형태</li>
</ul>
</li>
</ul>
<blockquote>
<h2 id="dnn의-2가지-종류">DNN의 2가지 종류</h2>
</blockquote>
<h3 id="1-convolutional-neural-network-cnn">1. Convolutional Neural Network, CNN</h3>
<ul>
<li>합성곱신경망</li>
<li>사람의 시신경 구조를 모방한 알고리즘</li>
<li>데이터를 특정 차원으로 추출하여, 해당 차원의 패턴을 파악하는 구조</li>
<li>데이터 펼쳐져 있을때 특정 특징들을 추출해 모아 하나의  Convilution Layer를 만들고 그 안에서 데이터를 줄이며 학습하는 형태</li>
<li>Convolution과정과 Pooling과정을 통해 진행</li>
<li>이미지 처리에 주로 사용되다가 자연어 처리에도 사용하기도 함<h3 id="2-recurrent-neural-network-rnn">2. Recurrent Neural Network, RNN</h3>
</li>
<li>순환신경망 알고리즘</li>
<li>반복적이고 순차적인 데이터를 순서대로 처리하는 형태의 알고리즘</li>
<li>알고리즘 내부의 순환구조가 존재하여, 과거의 학습을 Weight를 활용해 현재의 Node에 Weight를 반영하는 알고리즘</li>
<li>시계열 데이터 처리할 때 사용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[interview] 통계 및 수학]]></title>
            <link>https://velog.io/@ssom_d/interview-%ED%86%B5%EA%B3%84-%EB%B0%8F-%EC%88%98%ED%95%99</link>
            <guid>https://velog.io/@ssom_d/interview-%ED%86%B5%EA%B3%84-%EB%B0%8F-%EC%88%98%ED%95%99</guid>
            <pubDate>Tue, 17 Jan 2023 11:57:54 GMT</pubDate>
            <description><![CDATA[<h1 id="통계-및-수학">통계 및 수학</h1>
<ul>
<li>고유값(eigen value)와 고유벡터(eigen vector)에 대해 설명해주세요. 그리고 왜 중요할까요?</li>
<li>샘플링(Sampling)과 리샘플링(Resampling)에 대해 설명해주세요. 리샘플링은 무슨 장점이 있을까요?</li>
<li>확률 모형과 확률 변수는 무엇일까요?</li>
<li>누적 분포 함수와 확률 밀도 함수는 무엇일까요? 수식과 함께 표현해주세요.</li>
<li>조건부 확률은 무엇일까요?</li>
<li>공분산과 상관계수는 무엇일까요? 수식과 함께 표현해주세요.</li>
<li>신뢰 구간의 정의는 무엇인가요?</li>
<li>p-value를 모르는 사람에게 설명한다면 어떻게 설명하실 건가요?</li>
<li>R square의 의미는 무엇인가요?</li>
<li>평균(mean)과 중앙값(median)중에 어떤 케이스에서 뭐를 써야할까요?</li>
<li>중심극한정리는 왜 유용한걸까요?</li>
<li>엔트로피(entropy)에 대해 설명해주세요. 가능하면 Information Gain도요.</li>
<li>어떨 때 모수적 방법론을 쓸 수 있고, 어떨 때 비모수적 방법론을 쓸 수 있나요?</li>
<li>“likelihood”와 “probability”의 차이는 무엇일까요?</li>
<li>통계에서 사용되는 bootstrap의 의미는 무엇인가요.</li>
<li>모수가 매우 적은 (수십개 이하) 케이스의 경우 어떤 방식으로 예측 모델을 수립할 수 있을까요?</li>
<li>베이지안과 프리퀀티스트 간의 입장차이를 설명해주실 수 있나요?</li>
<li>검정력(statistical power)은 무엇일까요?</li>
<li>missing value가 있을 경우 채워야 할까요? 그 이유는 무엇인가요?</li>
<li>아웃라이어의 판단하는 기준은 무엇인가요?</li>
<li>필요한 표본의 크기를 어떻게 계산합니까?</li>
<li>Bias를 통제하는 방법은 무엇입니까?</li>
<li>로그 함수는 어떤 경우 유용합니까? 사례를 들어 설명해주세요.</li>
<li>베르누이 분포 / 이항 분포 / 카테고리 분포 / 다항 분포 / 가우시안 정규 분포 / t 분포 / 카이제곱 분포 / F 분포 / 베타 분포 / 감마 분포에 대해 설명해주세요. 그리고 분포 간의 연관성도 설명해주세요.</li>
<li>출장을 위해 비행기를 타려고 합니다. 당신은 우산을 가져가야 하는지 알고 싶어 출장지에 사는 친구 3명에게 무작위로 전화를 하고 비가 오는 경우를 독립적으로 질문해주세요. 각 친구는 2/3로 진실을 말하고 1/3으로 거짓을 말합니다. 3명의 친구가 모두 “그렇습니다. 비가 내리고 있습니다”라고 말했습니다. 실제로 비가 내릴 확률은 얼마입니까?</li>
<li>필요한 표본의 크기를 어떻게 계산합니까?</li>
<li>Bias를 통제하는 방법은 무엇입니까?</li>
<li>로그 함수는 어떤 경우 유용합니까? 사례를 들어 설명해주세요</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS231N] Lecture 02 : Image Classificaion pipeline]]></title>
            <link>https://velog.io/@ssom_d/CS231N-Lecture-02-Image-Classificaion-pipeline</link>
            <guid>https://velog.io/@ssom_d/CS231N-Lecture-02-Image-Classificaion-pipeline</guid>
            <pubDate>Tue, 17 Jan 2023 11:37:42 GMT</pubDate>
            <description><![CDATA[<hr>
<h1 id="span-stylecolordeeppinkcontentsspan"><span style="color:deepPink">Contents</span></h1>
<h4 id="image-classification-이란">Image Classification 이란?</h4>
<ol>
<li>데이터 중심 접근 방법 (Data-Driven Approach)</li>
<li>Nearest Neighbor (NN)</li>
<li>K-Nearest Neighbors</li>
<li>Linear Classification (선형 분류)</li>
</ol>
<hr>
<h2 id="image-classification-이란-1">Image Classification 이란?</h2>
<ul>
<li>이미지를 분류하는 것</li>
<li>이미지가 입력되면 시스템에서 미리 label해놓은 분류된 이미지 집합 중, 어디에 속할지 컴퓨터가 판단하는 것.</li>
<li>하지만 기계는 사람과 달리 정밀 분류가 힘들다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/733dd320-74f3-41f3-b32d-8cc9f2ec431b/image.png" alt=""></p>
<ul>
<li>위 사진과 같이 기계는 고양이 사진을 입력 받으면</li>
<li>RGB(Red, Blue, Green)값을 기준으로 격자 모양의 숫자들을 나열하여 인식한다.</li>
<li>하지만 기계는 카메라 각도나 밝기, 객채의 행동 혹은 가려짐 등 여러차이로 인해 이미지의 픽셀 값이 달리 읽어 사물을 다르게  인식.</li>
</ul>
<p>=&gt; 따라서, 이 문제를 해결하기 위해 새롭게 등장한 방법이 <code>데이터 중심 접근 방법 (Data-Driven Approach)</code> 이다.</p>
<h3 id="span-stylecolordodgerblue1-데이터-중심-접근-방법-data-driven-approachspan"><span style="color:DodgerBlue">1. 데이터 중심 접근 방법 (Data-Driven Approach)</span></h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/582bc149-0d9e-4543-8db9-de3e9fc695e9/image.png" alt=""></p>
<ol>
<li>객체의 특징을 규정하지 않음.</li>
<li>다양한 사진들과 label을 수집.</li>
<li>이를 이용해 모델을 학습해 사진을 새롭게 분류하는 방식.</li>
</ol>
<h3 id="span-stylecolordodgerblue2-nearest-neighbor-nnspan"><span style="color:DodgerBlue">2. Nearest Neighbor (NN)</span></h3>
<ul>
<li>입력받은 데이터를 저장한 후 -&gt; 새로운 데이터 들어오면 -&gt; 기존 데이터에서 비교해 -&gt; 가장 유사한 데이터를 찾아내는 방식.</li>
<li>강의에서는 CIFAR-10 (10가지 종류의 물체와 동물을 모은 사진 데이터 셋)데이터를 사용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/651f1096-f37c-43c4-8a2b-4ed3e00dd0f3/image.png" alt=""></p>
<ul>
<li><p>기계가 어떻게 이미지를 비교하고 입력과 비슷한 이미지를 찾아낼까?
=&gt; <code>Distance Metric</code> 공식을 통사용.</p>
</li>
<li><p>이 방법은 이미지는 pixel-wise로 비교하는데</p>
</li>
<li><p>test 이미지의 픽셀값에서 train 이미지의 픽셀값의 차를 구하고 절대값을 취함.</p>
</li>
<li><p>다음 각 픽셀 값을 모두 더해 하나의 출력값으로 만든다.</p>
</li>
</ul>
<blockquote>
<p>[단점]</p>
</blockquote>
<ul>
<li>모든 사진의 픽셀값을 계산하기 때문에</li>
<li>예측 과정 시간 소요가 큼</li>
<li>이를 보완하기 위해 K-Nearest Neigbor 나옴</li>
</ul>
<h3 id="3-k-nearest-neighbors"><a href="https://velog.io/@ssom_d/ML-K-NN-K-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98">3. K-Nearest Neighbors</a></h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/87218b6b-cb9a-4553-b20b-18eaeb8c5f4d/image.png" alt=""></p>
<ul>
<li><p>distance mertic를 이용해서 가까운 이웃을 k개 만큼 찾고</p>
</li>
<li><p>이웃 간 투표해 득표 많이 얻은 label로 예측하는 방법.</p>
</li>
<li><p>가까운 이웃이 존재하지 않으면 흰색으로 표기</p>
</li>
<li><p>KNN을 사용하려면 학습 전 사전에 K와 거리 척도인 하이퍼 파라미터를 설정해야함.</p>
</li>
<li><p>하이퍼 파라미터 선택법은 preoblem-dependant(문제 의존적) 이므로, 여러 시도 후 성능 좋은 것을 선택한다.</p>
</li>
<li><p>일반적으로 데이터를 train,validation,test로 나누어 학습하고 예측하는 방법과, Cross vaildation(교차검증)이 있다.</p>
</li>
<li><p>교차 검증은 작은 데이터에 사용하며 딥러닝에는 많이 사용하지 않는다.</p>
</li>
</ul>
<blockquote>
<h3 id="31-distance-metric">3.1) Distance Metric</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/4761d431-78ca-4e47-af52-c30680685691/image.png" alt=""></p>
</blockquote>
<ol>
<li>맨해튼 거리 (Manhattan distance) : L1 distance</li>
</ol>
<ul>
<li>좌표계 회전 시 거리 값이 달라짐</li>
</ul>
<ol start="2">
<li>유클리디안 거리 (Euclidean distance) : L2 distance</li>
</ol>
<ul>
<li>좌표계 회전 시 영향 받지 않음</li>
</ul>
<h3 id="span-stylecolordodgerblue4-linear-classification-선형-분류span"><span style="color:DodgerBlue">4. Linear Classification (선형 분류)</span></h3>
<ul>
<li>Neral Network(NN)과 Convolution Neral Network(CNN) 기반 알고리즘</li>
<li>NN을 구축할 때 다양한 컴포넌트를 사용할 수 있는데</li>
<li>이 컴포넌트를 한 데 모아 CNN을 이루게 된다.</li>
<li>이 방법은 Nearest Neighbor보다 효율적이고 빠름</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/65f750a3-3449-4aaa-9b58-20cee3774f5d/image.png" alt=""></p>
<p>ex) 고양이 사진 (32x32x3)을 예시로 입력(X) 받음
-&gt; 가중치 파라미터 (W)와 곱하여
-&gt; 카테고리 score 값 (f(x,w))인 10을 만듦.</p>
<ul>
<li>score 값이 높을 수록 고양이일 확률이 높음.</li>
</ul>
<blockquote>
<h4 id="bias편향값">bias(편향값)</h4>
</blockquote>
<ul>
<li>W * x 에 bias(편향값)을 더하는데,</li>
<li>bias는 입력과는 직접적 관계를 가지지 않으나</li>
<li>이미지 라벨의 불균형한 상태 보완 위해 사용된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/e91a1a0f-5e09-4665-b5f8-4e56ddce0bf4/image.png" alt=""></p>
<ul>
<li>입력으로 2*2 형태 고양이 사진을 받으면, linear classifier는 4-dim 열 형태로 퍼지게 됨.</li>
<li>그리고 각각의 가중치(W)와 입력 이미지의 값(X)들의 내적한 값(클래스 간 템플릿 유사도를 측정한 값)에 bias를 더하면 score 값이 구해짐.</li>
</ul>
<h3 id="multimodal-problem-가중치-설정의-필요성">Multimodal problem (가중치 설정의 필요성)</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/09d3bb24-0b85-46b2-8642-ba663adef562/image.png" alt=""></p>
<ul>
<li>이미지를 고차원 공간으로 보게 되면, Linear Classifier는 각 클래스를 구분해주는 선형 경계 역할을 하지만,</li>
<li>일차 함수 직선으로 분류되지 않은, 즉 데이터의 분포에 따른 선형으로 분류할 수 없는 데이터가 대부분이다 (Multimodal problem)</li>
<li>이러한 단점 보완을 위해 W 가중치 설정이 중요하며, 다음 강의부터 W를 설정할 방법을 알아볼 것이다.</li>
</ul>
<hr>
<h3 id="reference">Reference</h3>
<ul>
<li><a href="https://docs.sangyunlee.com/deep-learning/cs231n-1/cs231n">https://docs.sangyunlee.com/deep-learning/cs231n-1/cs231n</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] K-NN (K-최근접 이웃)알고리즘]]></title>
            <link>https://velog.io/@ssom_d/ML-K-NN-K-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@ssom_d/ML-K-NN-K-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Tue, 17 Jan 2023 11:07:16 GMT</pubDate>
            <description><![CDATA[<h1 id="1-k-nn-알고리즘이란">1. K-NN 알고리즘이란?</h1>
<ul>
<li><p>K-최근접 이웃 (K-NN, K-Nearest Neighbot) 알고리즘</p>
</li>
<li><p>분류 (Classification)</p>
</li>
<li><p>지도학습</p>
</li>
<li><p>비슷한 특성을 가진 데이터는 비슷한 범주에 속하는 경향이 있다는 가정
<img src="https://velog.velcdn.com/images/ssom_d/post/33704da0-c49e-4f6d-969f-5579fb22e35c/image.png" alt=""></p>
</li>
<li><p>주변의 가장 가까운 K개의 데이터를 보고 데이터가 속할 그룹을 판단하는 알고리즘</p>
</li>
<li><p>가장 가까운 속성에 따라 분류하여 레이블링을 하는 알고리즘</p>
</li>
</ul>
<p>[장점]</p>
<ul>
<li>단순, 구현 쉬움, 빠름</li>
</ul>
<p>[단점]</p>
<ul>
<li>모델을 생성하지 않기 때문에</li>
<li>특징과 클래스 간 관계 이해에 제한적</li>
<li>모델 결과로 해석하는게 아닌, 미리 변수와 클래스 간 관계 파악해 알고리즘에 적용해야 원하는 경과 얻으 수 있음</li>
<li>적절한 k의 선택이 필요</li>
<li>데이터가 많아지면 분류 단계가 느림</li>
</ul>
<h1 id="2-거리-기반-분류분석-모델">2. 거리 기반 분류분석 모델</h1>
<ul>
<li>K-NN 알고리즘은 새로운 데이터로부터 거리가 가까운 K개의 다른 데이터의 레이블(속성)을 참고하여 K개의 데이터 중 가장 빈도 수가 높게 나온 데이터의 레이블로 분류</li>
</ul>
<h2 id="거리-측정-방법">거리 측정 방법</h2>
<h3 id="1-유클리드-거리-euclidean-distance--l2-distance">1) 유클리드 거리 (Euclidean Distance) : L2 Distance</h3>
<ul>
<li>2차원 평면에 서로 다른 두 점 A(x1, y1)와 B(x2, y2)가 있을 때 </li>
<li>이 둘의 거리 d는 유클리드 거리 계산법에 의해 다음과 같이 나온다.
<img src="https://velog.velcdn.com/images/ssom_d/post/e3bf43b7-85d4-4941-87ee-9013f214aa65/image.png" alt="">
<img src="https://velog.velcdn.com/images/ssom_d/post/e7cdb8d4-2a7c-49bb-b82a-fb2b08fa7c5e/image.png" alt=""></li>
</ul>
<h3 id="2-맨해튼-거리-mangattan-distance--l1-distance">2) 맨해튼 거리 (Mangattan Distance) : L1 Distance</h3>
<ul>
<li>유클리드 공식처럼 직선으로 이동할 수 없는 건물들이 많은 지역의 거리 재기 위해 탄생한 공식
<img src="https://velog.velcdn.com/images/ssom_d/post/3cd4a82b-35d9-4725-ae63-95b744bc2ddf/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/fbf8de72-e375-4b14-a2fd-2d516463138c/image.png" alt=""></p>
<ul>
<li><code>초록색</code> 직선 : 유클리드 거리</li>
<li>나머지 색 선 : 맨해튼 거리  =&gt; 모두 총 거리가 동일</li>
</ul>
<h1 id="3-k-nn-알고리즘-원리">3. K-NN 알고리즘 원리</h1>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/243b456a-d928-4070-a97d-cd5f08413568/image.png" alt=""></p>
<ul>
<li>K 값에 따라 분류가 달라짐</li>
<li>K는 홀수 설정이 좋으며, 최선의 K 선택하는데 일반적으로 총 데이터 수의 제곱근 값 사용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS231N] Lecture 01 : Introduction and Historical Context]]></title>
            <link>https://velog.io/@ssom_d/CS231N-Lecture-01-Introduction-and-Historical-Context</link>
            <guid>https://velog.io/@ssom_d/CS231N-Lecture-01-Introduction-and-Historical-Context</guid>
            <pubDate>Tue, 17 Jan 2023 09:26:29 GMT</pubDate>
            <description><![CDATA[<h1 id="lecture-01--introduction-and-historical-context">Lecture 01 : Introduction and Historical Context</h1>
<h2 id="computer-vision-이란">Computer Vision 이란?</h2>
<ul>
<li>컴퓨터 과학의 연구 분야 중 인간이 시각적으로 하는 일들을 대행하도록 시스템을 만드는 것.</li>
</ul>
<p>2015년부터 2017년까지 CSICO에서 발표한 통계자료에 따르면 인터넷 트래픽 중 80%는 인터넷 비디오데이터였다.
인터넷의 데이터 대부분이 시각적인 자료였다. 
이러한 시각적 자료 혹은 데이터를 암흑 물질(Dark Physics)라고 표현했는데, 시각 데이터를 이해하고 해석하기 어려우며 이를 해결할 수 있는 알고리즘이 개발의 필요성을 강조했다. </p>
<h3 id="computer-vision의-역사">computer vision의 역사</h3>
<p><img src="https://velog.velcdn.com/images/ssom_d/post/aa0aad81-8221-4e1b-aa71-3f19c0fb1ad3/image.png" alt=""></p>
<p>고양이의 뇌에 전기적 신호를 보내 1차 시각 피질에서 다양한 종류의 세포가 있음을 알아내는데, 세포가 Edge에 반응하는 세포로 시각 처리가 단순한 구조로 시작하여 점점 복잡해지는 것을 발견했다. </p>
<p>ImageNet 프로젝트 소개와 다음 2가지의 목표를 둔다. </p>
<ol>
<li>세상 모든 이미지 분류  </li>
<li>기계학습의 Overfiting 문제 극복 </li>
</ol>
<p>그리고 2012년 ImageNet 국제대회 ILSVRC 개최에서 CNN(Convolutional Neural Network) 도입으로  기존 28.2%, 25%의 오류율을 16.4%로 오차율이 급격히 감소되었다. 
따라서 C2S231n 수업에서는 CNN을 배우게 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML] 과적합(Overfitting)과 규제(Regularization)]]></title>
            <link>https://velog.io/@ssom_d/ML-%EA%B3%BC%EC%A0%81%ED%95%A9Overfitting%EA%B3%BC-%EA%B7%9C%EC%A0%9CRegularization</link>
            <guid>https://velog.io/@ssom_d/ML-%EA%B3%BC%EC%A0%81%ED%95%A9Overfitting%EA%B3%BC-%EA%B7%9C%EC%A0%9CRegularization</guid>
            <pubDate>Fri, 13 Jan 2023 11:01:01 GMT</pubDate>
            <description><![CDATA[<h1 id="1-과적합이란">1. 과적합이란</h1>
<hr>
<p>-모델이 train 데이터에 지나치게 적응되어 그 외 데이터에는 대응하지 못하는 상태.</p>
<p>EX) 아래와 같은 회귀 문제에서, 두번째 모델이 최적의 모델이다
<img src="https://velog.velcdn.com/images/ssom_d/post/d8ab9560-eeb6-4e52-8972-e474b42f6e94/image.png" alt=""></p>
<ol>
<li>첫번쨰 모델 : 과소적합(Underfitting), 주어진 데이터를 아직 제대로 반영하지 못함.</li>
<li>두번쨰 모델 : 우리가 원하는 모델!</li>
<li>세번째 모델 : 과대적합(Overfitting), 새로운 데이터에는 적용할 수 없는 일반화하기 어려운 경우.</li>
</ol>
<ul>
<li><p>여기서 빨간 점(data)과 점선(모델이 예측한 결과)의 거리가 가장 가까운 모델은 두번째 모델이다.</p>
<ul>
<li>모든 input 데이터에 대해 오차가 존재하지만, 두번째가 가장 데이터 분포와 경향 잘 나타내고 있음.</li>
<li>과적합된 세번째 모델은, 기존 데이터들은 오차 없이 잘 표현했지만, 새로운 데이터(빨간점)가 주어지자 오히려 예측한 값의 오차가 더 크게 나타남.</li>
</ul>
</li>
<li><p>모델의 성능은 곧 일반화 성능을 말한다고도 볼 수 있음.</p>
</li>
</ul>
<h1 id="2-과적합이-일어나는-이유">2. 과적합이 일어나는 이유</h1>
<hr>
<p>아주 다양하지만, 주로 두가지 경우에 발생한다.</p>
<ol>
<li>상대적으로 데이터 수가 적은데 비해 feature(-&gt; parameter)가 많고 표현력이 높은 모델의 경우</li>
<li>train 데이터가 적은 경우 (상대적으로 feature -&gt; parameter가 많은 데 비해)
<img src="https://velog.velcdn.com/images/ssom_d/post/6c782f52-0da4-425c-a3ef-622d81c41e37/image.png" alt=""></li>
</ol>
<ul>
<li>train에 과적합된 eccuracy 그래프</li>
<li>train에 비해 test 성능이 낮고 그 차이가 크면 과적합 발생한 것.</li>
</ul>
<h1 id="3-과적합을-방지하는-법">3. 과적합을 방지하는 법</h1>
<hr>
<h3 id="overfitting-해결법">Overfitting 해결법</h3>
<ol>
<li>input 데이터 늘리기</li>
<li>feature의 개수를 줄이기 <ul>
<li>주요 feature를 직접 선택하고 버림</li>
<li>model selection algorithm을 사용</li>
</ul>
</li>
<li>규제(Regularization)<ul>
<li>각 feature마다 페널티(규제)를 부여해 그 영향력을 조정하는 것</li>
<li>모든 feature를 사용하되, parameter(θ)의 값을 줄인다.</li>
</ul>
</li>
</ol>
<blockquote>
<p>정규화, 표준화, 정칙화(규제) 차이</p>
</blockquote>
<ol>
<li>정규화(Nomalization)
 : 데이터의 분포가 정규분포에 가깝게 만드는 것.
 : 범위(scale)를 0~1 사이 값으로 바꿈</li>
<li>표준화(Standardization)
 : 데이터가 표준 정규분포에 가깝게 만드는 것.
 : 평균이 0, 분산이 1 되도록 scaling</li>
<li>정칙화/규제 (Regularization)
 : 오버피팅 방지를 위해 weight에 penalty 부여하는것.</li>
</ol>
<h1 id="4-규제-regularization">4. 규제 (Regularization)</h1>
<p>: 모델이 가질 수 있는 파라미터 값에 제약을 부여해 과적합을 방지하는 방법론</p>
<h2 id="1-가중치-감소">1. 가중치 감소</h2>
<ul>
<li>모델의 학습 과정에서 가중치에 페널티(규제) 부여함으로써 과적합 방지하는 방법</li>
<li>가중치 W가 클수록 더 큰 페널티를 부과 -&gt; 해당 input x에 대해 지나치게 fit하지 않도록 조절</li>
<li>이때 페널티를 얼마나 부과할 것인지 계산 하는 방법 L1 or L2 규제</li>
</ul>
<ol>
<li><p>L1 규제 (Lasso)
: 가중치의 <code>절댓값</code>에 비례하는 비용 추가
<img src="https://velog.velcdn.com/images/ssom_d/post/520c753e-1529-4937-b90a-28933cdf24c1/image.png" alt=""></p>
</li>
<li><p>L2 규제 (Ridge)
: 가중치 <code>제곱</code>에 비례하는 비용 추가
<img src="https://velog.velcdn.com/images/ssom_d/post/fc0256ba-115d-43bb-9d3e-6cc487d2e087/image.png" alt=""></p>
</li>
</ol>
<ul>
<li>L : 손실함수(loss function), ㅅ는 규제 강도(Regularization Strength)</li>
<li>즉, 규제 정도를 결정하는 하이퍼파라미터 의미</li>
</ul>
<h2 id="2-드롭아웃-dropout">2. 드롭아웃 (Dropout)</h2>
<ul>
<li>뉴런을 임의로 삭제하며 학습하는 방법</li>
<li>train 하면서 무작위로 은닉층(Hidden layer)의 뉴런을 골라 배제하고, 다음 layer로 신호를 전달하지 못하도록 하는 것.
<img src="https://velog.velcdn.com/images/ssom_d/post/ae596c28-93cf-46a1-b185-cc469b16571f/image.png" alt=""></li>
</ul>
<hr>
<h3 id="reference">Reference</h3>
<ul>
<li><a href="https://nanunzoey.tistory.com/entry/%EA%B3%BC%EC%A0%81%ED%95%A9Overfitting%EA%B3%BC-%EA%B7%9C%EC%A0%9CRegularization">https://nanunzoey.tistory.com/entry/%EA%B3%BC%EC%A0%81%ED%95%A9Overfitting%EA%B3%BC-%EA%B7%9C%EC%A0%9CRegularization</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 딥러닝 주요 모델]]></title>
            <link>https://velog.io/@ssom_d/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%A3%BC%EC%9A%94-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@ssom_d/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%A3%BC%EC%9A%94-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Thu, 12 Jan 2023 12:54:27 GMT</pubDate>
            <description><![CDATA[<h1 id="neural-network">Neural Network</h1>
<ul>
<li>입력,은닉,출력층으로 구성된 모형</li>
<li>각 층을 연결하는 노드의 가중치를 업데이터하며 학습</li>
<li>overfitting이 심하게 일어나고, 학습 시간이 매우 오래 걸림
<img src="https://velog.velcdn.com/images/ssom_d/post/4ef7af8e-648a-45dd-bbe0-ff7a3d53a266/image.png" alt=""></li>
</ul>
<h1 id="deep-learning">Deep Learning</h1>
<ul>
<li>다층의 layer 통해 복잡한 데이터 학습이 가능토록 함</li>
<li>알고리즘 및 GPU의 발전이 deep learning의 부흥을 이끔</li>
<li>다양한 형태로 발전 (CNN,RNN,AutoEncoder 등)</li>
<li>AutoEncoder : x를 갖고 x를 예측해서 새로운 변수(특징) 추출 (unsupervised learning)</li>
<li>다양한 분야로 발전 <ul>
<li>image Resolution(해상도 복원)</li>
<li>style transfer (스타일 전환)</li>
<li>colorization (색 변환) 등)</li>
<li>object detection(객체 판별)</li>
</ul>
</li>
<li>네트워크 구조의 발전<ul>
<li>ResNET</li>
<li>DenseNET
<img src="https://velog.velcdn.com/images/ssom_d/post/785b744b-a0e7-4fc5-8ab5-19b911e35ab5/image.png" alt=""></li>
</ul>
</li>
<li>네트워크 초기화 기법<ul>
<li>Xavier</li>
<li>he initialization</li>
</ul>
</li>
<li>다양한 activaion function (ReLu, ELU, SeLU, Leaky ReLU 등)</li>
<li>Generalization, overfitting 문제</li>
<li>Semi-supervised learning, Unsupervised learning</li>
</ul>
<h1 id="gan-generative-adversarial-network">GAN (Generative Adversarial Network)</h1>
<ul>
<li><p>Data를 만들어내는 Generator와 만들어진 data를 평가하는 Discriminator가 서로 대립(Adversarial)적으로 학습해가며 성능을 점차 개선해 나가자는 개념</p>
</li>
<li><p>생성 모델</p>
</li>
<li><p>Discriminator를 학습시킬 때에는 D(x):진짜데이터 가 1이 되고 D(G(z)):가짜데이터 가 0이 되도록 학습시킴
(진짜 데이터를 진짜로 판별하고, 가짜 데이터를 가짜로 판별할 수 있도록)</p>
</li>
<li><p>Generator를 학습시킬때에는 D(G(z))가 1이 되도록 학습시킴
(가짜 데이터를 discriminator가 구분 못하도록 학습, discriminator를 헷갈리게 하도록)</p>
</li>
</ul>
<p>=&gt; 서로 대립적으로 학습하며 성능이 개선되며, Generator는 결국 진짜 같은 가짜 데이터를 만들어 discriminator가 분류할 수 없도록 만듬 </p>
<h1 id="강화학습-reinforcement-learning">강화학습 (Reinforcement Learning)</h1>
<ul>
<li><p>현재 상태에서 먼 미래까지 어떤 액션을 취해야 큰 보상을 받을 수 있을까</p>
</li>
<li><p>Q-learning
  : 현재 상태에서부터 먼 미래까지 가장 큰 보상을 얻을 수 있는 행동을 학습하게 하는 것.
<img src="https://velog.velcdn.com/images/ssom_d/post/3d711cf0-4269-4eff-99a5-c70e340d930b/image.png" alt=""></p>
</li>
<li><p>Q-learning + Deep learning : DQN (Deep Reinforcement Learning) : 잘안씀</p>
</li>
<li><p>더 효율적으로 빠르게 학습 할 수 있는 강화학습 모델 연구 ing</p>
</li>
<li><p>Action이 continuous한 경우 (실수값) 어떻게 해야 학습이 잘되는가?</p>
</li>
<li><p>Reward가 매우 sparse(희박)한 경우 </p>
</li>
<li><p>Multi agent 강화학습 모델의 경우</p>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>