<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>code_hsb.log</title>
        <link>https://velog.io/</link>
        <description> 돌아보면 후회 없기를 바라며</description>
        <lastBuildDate>Mon, 07 Nov 2022 05:22:46 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>code_hsb.log</title>
            <url>https://images.velog.io/images/code_hsb/profile/32efaba0-e853-4d51-a3c8-8c7e9d0d89c9/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. code_hsb.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/code_hsb" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[(미)딥러닝 PART.CS231n 10강]]></title>
            <link>https://velog.io/@code_hsb/%EB%94%A5%EB%9F%AC%EB%8B%9D-PART.CS231n-10%EA%B0%95</link>
            <guid>https://velog.io/@code_hsb/%EB%94%A5%EB%9F%AC%EB%8B%9D-PART.CS231n-10%EA%B0%95</guid>
            <pubDate>Mon, 07 Nov 2022 05:22:46 GMT</pubDate>
            <description><![CDATA[<h1 id="rnn">RNN</h1>
<h3 id="구조">구조</h3>
<ul>
<li>동작방법
<img src="https://velog.velcdn.com/images/code_hsb/post/ed454c45-a098-4838-8ec7-0dd9fa7b6a8b/image.jpg" alt=""><ol>
<li>히든 state의 재귀적인 반복<ol start="2">
<li>출력 y를 가지려면 끝단에 FC레이어 존재<ol start="3">
<li>매 스탭에서 동일한 가중치 행렬 W가 사용됨</li>
<li>재귀적으로 피드백하는 것으로 h0는 초기상태로 0으로 초기화</li>
<li>입력 -&gt; ht-1, xt 2개/ 출력 -&gt; 다음 상태 ht</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ul>
<h3 id="학습">학습</h3>
<ul>
<li>cost함수 구하는 법
<img src="https://velog.velcdn.com/images/code_hsb/post/82d54260-3771-4c0e-bfbe-30161cb25c77/image.jpg" alt=""><ol>
<li>y는 h를 이용하여 만듬</li>
<li>그라디언트도 동일</li>
</ol>
</li>
</ul>
<ul>
<li>loss함수
<img src="https://velog.velcdn.com/images/code_hsb/post/4aef4d24-85ee-4971-ae7e-3f744a92a749/image.jpg" alt=""><ol>
<li>매 타임스탭의 셀마다 y값이 출력됨</li>
<li>따라서 매 스탭마다 loss가 생성됨</li>
<li>데이터 입력 1개를 넣으면 loss가 하나가 나오고 모든 데이터를 거치면 나온 데이터 수만큼의 loss를 평균내어 최종 loss를 구하는데 </li>
</ol>
  -&gt; 여기서는 하나의 입력을 넣었는데 여러개의 loss가 나온 거임</li>
</ul>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/0d9ca733-c35f-409d-a5f8-4f3e710db72e/image.jpg" alt=""></p>
<ul>
<li>최종 loss 구하기</li>
</ul>
<p>1.모든 타임 스탭마다 loss가 생성
    2. 소프트맥스를 거치니 소프트맥스 크로스엔트로피 loss를 계산함
    3. 모든 셀의 loss를 더해서 최종 loss를 생성
    4. 그라디언트도 동일한 방식으로 최종 그라디언트를 구함
    ※ 순전파 : loss를 구하는 과정/ 역전파 : 그라디언트를 구하는 과정</p>
<h3 id="자연어-처리">자연어 처리</h3>
<ul>
<li>test data를 사용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/ddd2a14b-03a0-4b3a-af6f-357de9d71a8e/image.jpg" alt=""></p>
<ol>
<li>입력으로 &#39;h&#39;하나를 학습된 모델에 넣음</li>
<li>출력 &#39;e&#39;가 다음 타임 스탭의 입력으로 들어감</li>
<li>따라서 &#39;h&#39;를 아는 &#39;e&#39;로 &#39;l&#39;의 출력을 함</li>
<li>따라서 &#39;h&#39;를 아는 &#39;e&#39;를 아는 &#39;l&#39;로 &#39;l&#39;의 출력을 함</li>
<li>학습에서는 &#39;h&#39; &#39;e&#39; &#39;l&#39; &#39;l&#39;을 넣고 ht의 ht+1의 입력으로 seq한 학습을 하고
/ 테스트에서는 학습된 히든 state들과 이전 출력의 다음 입력으로 seq한 예측을 할 수 있음</li>
</ol>
<h3 id="loss-역전파">loss, 역전파</h3>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/e7a3f1fd-797b-40a6-bd5b-b423758aeb41/image.jpg" alt=""></p>
<ul>
<li>역전파 Through time<ol>
<li>시퀀스 스탭마다 출력값이 존재하여 loss를 더하여 최종 loss를 구하고 그라디언트도 마찬가지이다.
2 근데 이럴 경우 seq가 긴  경우 문제가 될 소지가 있다 -&gt; 법전으로 하면 학습이 느리다.</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/02e595da-5dc0-48c4-9b87-91600fe3d2af/image.jpg" alt=""></p>
<ul>
<li>batch backprop</li>
</ul>
<ol>
<li>트레인 스탭을 100으로 자른다.</li>
<li>100스탭만 순전파하고  서브 seq의 loss를 계산하고 그라디언트 스탭을 진행한다.</li>
<li>순전파시 이전 배치에서 계산한 hidden state는 유지한다. -&gt; 다음 배치에서 순전파를 계산할 때 이전 hidden을 사용한다</li>
<li>그라디언트 스탭(역전파)은 현재 배치에서만 진행된다.
※ 확률적 경사하강의 seq 데이터 버전이다.</li>
</ol>
<h3 id="다이어그램">다이어그램</h3>
<h4 id="rnn-1">RNN</h4>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/ed9cf586-0ad8-4ec5-91fd-093e2dd5a87c/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/e18e47e8-a5a2-4d7d-bcbd-4bcb8fbb041d/image.jpg" alt=""></p>
<h4 id="lstm">LSTM</h4>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/3bfc3cb3-d036-45d9-997e-7650dd5e4852/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/960a6301-18f2-4cda-b036-b2bc3517211b/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/3f84b5b1-f826-46cd-b546-ee2ad7951b62/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/148f35e0-fa1f-404a-9222-00ec63192aa9/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/c59e809e-aa44-4cb7-a646-65cbf1d25f97/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/694fcc1c-9881-4432-b0cf-3d0e84e3930f/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/d068f078-a31a-415f-b907-ad481f43ede2/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[GAN PART.Pix2Pix]]></title>
            <link>https://velog.io/@code_hsb/GAN-PART.Pix2Pix</link>
            <guid>https://velog.io/@code_hsb/GAN-PART.Pix2Pix</guid>
            <pubDate>Wed, 28 Sep 2022 09:43:24 GMT</pubDate>
            <description><![CDATA[<h1 id="우리-프로젝트에-가장-가까울-수-도-있는-모델">우리 프로젝트에 가장 가까울 수 도 있는 모델</h1>
<blockquote>
<p>특징</p>
</blockquote>
<ol>
<li>CGAN을 사용한 이미지간 변환이 pix2pix라는 이름으로 출시되었을 때 바로 사용할 수 있을 만큼 간단한 화풍 묘사 신경망이라는 평가</li>
<li>pix2pix 아키텍쳐는 훈련하기가 쉽고 파라미터 조율이 간단해서 최종 사용자들에게 인기를 끌었다.</li>
<li>cgan의 생성자에 mnist처럼 레이블을 넣은 대신 실제 이미지를 넣은 것 -&gt; cyclegan이 cgan 두개를 이어 붙인 거라면 pix2pix는 cgan 한개</li>
</ol>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/35648d70-eb46-4e56-87d9-a21e815521b3/image.png" alt=""></p>
<blockquote>
<p>판별기</p>
</blockquote>
<ul>
<li>입력 : x이미지, y이미지 두개를 접합</li>
<li>출력 : 0, 1로 분류 -&gt; 입력으로 들어온 이미지가 실제 이미지인지 가짜 이미지인지 분류
★ 2개 이미지 입력 및 단일 분류 출력</li>
</ul>
<blockquote>
<p>생성기</p>
</blockquote>
<ul>
<li>Unet 기반</li>
</ul>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/66a17c8e-e792-4bd3-a23a-a911d7d1f44f/image.png" alt=""></p>
<ul>
<li>skip connection : 깊은 모델이 입력단의 데이터를 잊지 않도록 하는 목적(케라스에서는 concatenate layer로 나타냄)</li>
</ul>
<blockquote>
<p>훈련</p>
</blockquote>
<p><a href="https://drive.google.com/file/d/1eSkw6UDfhY9wugUKBr5QwfKfzNaBBmha/view?usp=sharing">https://drive.google.com/file/d/1eSkw6UDfhY9wugUKBr5QwfKfzNaBBmha/view?usp=sharing</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[딥러닝 PART.Batch Normalization]]></title>
            <link>https://velog.io/@code_hsb/%EB%94%A5%EB%9F%AC%EB%8B%9D-PART.Batch-Normalization</link>
            <guid>https://velog.io/@code_hsb/%EB%94%A5%EB%9F%AC%EB%8B%9D-PART.Batch-Normalization</guid>
            <pubDate>Tue, 16 Aug 2022 08:40:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>신경망에서의 학습</p>
</blockquote>
<ul>
<li>학습시 Gradient 기반의 방법들은 파라미터 값의 작은 변화가 신경망 출력에 얼마나 영향을 미칠 것인가를 기반으로 파라미터 값을 학습</li>
<li>변화가 신경망 결과에 매우 작은 변화를 미치게 될 경우 효과적인 학습 불가</li>
<li>Gradient 라는 것은 변화량으로 변화량이 매우 작아지거나(Vanishing) 커진다면(Exploding) 신경망 학습이 불가</li>
</ul>
<blockquote>
<p>안정적인 학습을 위한 간접적인 방법</p>
</blockquote>
<ul>
<li><p>Sigmoid, tanh : 매우 비선형적인 방식으로 입력 값을 매우 작은 출력 값의 범위로 squash 
e.g. sigmoid는 실수 범위의 수를 [0, 1]로 맵핑<br><br></p>
</li>
<li><p>위의 문제점 : </p>
</li>
</ul>
<ol>
<li>출력의 범위를 설정하여 매우 넓은 입력 값의 범위가 극도로 작은 범위의 결과 값으로 매핑<br><br></li>
<li>이러한 현상은 비선형성 레이어들이 여러개 있을 때 더욱 학습이 악화<ul>
<li>첫 레이어의 입력 값에 대해 매우 큰 변화량이 있더라도 결과 값의 변화량은 극소<br></li>
</ul>
</li>
<li>간접 X -&gt; 직접적으로 &quot;학습하는 과정 자체를 전체적으로 안정화&quot;하여 학습 속도를 가속 시킬 수 있는 근본적인 방법인 &quot;배치 정규화(Batch Normalization)&quot;를 사용
<br><br></li>
</ol>
<blockquote>
<p>정규화를 하는 이유</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/2799dded-80d6-4e96-bc8f-e445b70631d1/image.PNG" alt=""></p>
<ul>
<li>그래프를 왼쪽에서 오른쪽으로 만들어, 로컬 옵티멈에 빠질 수 있는 가능성을 낮춘다.</li>
<li>로컬 옵티멈에 빠지는 것이 Gradient가 매우 작아져서 신경망 결과에 매우 작은 영향을 주게 되어 발생</li>
<li>학습 자체에서 안정화를 시켜버림</li>
</ul>
<blockquote>
<p>학습 불안정화가 일어나는 이유</p>
</blockquote>
<p>각 레이어나 엑티베이션 마다 입력값의 분산이 달라지기 때문</p>
<ul>
<li>Covariate Shift : 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상</li>
<li>Internal Covariate Shift : 레이어를 통과할 때 마다 Covariate Shift 가 일어나는 현상</li>
</ul>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/e67a71c8-9304-40e4-847e-8269b2bebfbf/image.PNG" alt=""></p>
<blockquote>
<p>배치정규화</p>
</blockquote>
<ul>
<li>정의 : 각 batch 별 평균과 분산을 기준으로 각 레이어에서 나오는 output을 정규화하는 기법</li>
<li>평균과 분산을 조정하는 과정이 별도의 과정으로 떼어진 것이 아니라, 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정 역시 같이 조절</li>
</ul>
<br>

<ul>
<li>즉, 각 레이어마다 정규화 하는 레이어를 두어, 변형된 분포가 나오지 않도록 조절 <ul>
<li>레이터를 통과할 때마다 이전 레이어와 값들이 너무 심하게 차이나는 정도를 줄이고자 사용</li>
<li>통과할 때마다 변형된 분포가 나오지 않게 하여 Covariate Shift가 일어나지 않게 해준다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/30f96e23-62b8-4efb-ac34-65c7940ec77e/image.PNG" alt=""></p>
<ul>
<li><p>배치란?
모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음</p>
<p>-&gt; 헷갈렸던 부분 : cnn의 배치란 batch_size = 10이면 mnist 데이터의 0~9행</p>
</li>
<li><p>수식
<img src="https://velog.velcdn.com/images/code_hsb/post/c044d381-6f03-4512-8497-00dc5c785f4f/image.PNG" alt=""></p>
<ul>
<li><p>미니 배치의 평균과 분산을 이용해서 정규화 한 뒤 scale 및 shift 를 감마(γ) 값, 베타(β) 값을 통해 실행</p>
<p>-&gt; 미니 배치의 평균과 분산으로 정규화하는 것은 말 그대로 전체 데이터의 측정치로 정규화하는 것이 아니라는 의미
-&gt; 중요 포인트는 감마(γ) 값, 베타(β) = 일반 정규화와 다른 부분</p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>위에서...</p>
<ul>
<li>감마와 베타는 학습 가능한 변수. 즉, 역전파에서 같이 학습됨</li>
<li>이렇게 정규화된 값을 활성화 함수의 입력으로 사용하고, 최종 출력 값을 다음 레이어의 입력으로 사용 (활성화 함수의 출력을 정규화의 입력으로 사용하면 위의 간접적인 방법과 같은 결과)</li>
</ul>
</li>
<li><p>특징</p>
</li>
</ul>
<ol>
<li>활성화 함수 앞쪽에 배치(4, 5일차 비교)
<img src="https://velog.velcdn.com/images/code_hsb/post/9fc3dfc7-4eb0-4770-bb83-edca09fb3193/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/code_hsb/post/b9bc6a7f-51bd-435f-a23f-5439d9d7fbc3/image.PNG" alt=""></li>
</ol>
<ol start="2">
<li>신경망에 포함되어 역전파를 통해 학습됨</li>
</ol>
<blockquote>
<p>이전 스터디에서</p>
</blockquote>
<ul>
<li><p>정규화 : 학습셋 전제 집합에 정규화 실시</p>
</li>
<li><p>배치 정규화 : 미니 배치 단위로 정규화 실시 근데 cnn에 적용하고자 할 때는 cnn의 특성을 고려해줘야한다.</p>
<ul>
<li><p>DNN의 배치 정규화
<img src="https://velog.velcdn.com/images/code_hsb/post/a0cb5813-6e91-430a-8bf0-6cb290997f4d/image.PNG" alt=""></p>
<ul>
<li>발제자분 : &quot;각 feature의 평균과 분산을 구해서 batch에 있는 각 특성(feature)을 정규화, batch전반에 걸쳐서 처리되므로 batch size와 관련이 깊음&quot;</li>
</ul>
<ol>
<li><p>세로 120451이 하나의 샘플이다.</p>
</li>
<li><p>가로 1, 3, 6이 feature가 된다. (여기서 feature란 cnn의 feature 맵이랑 연결시켜 보면 하나의 픽셀을 feature라고 하고 feature들이 모여서 feature 맵이라고 하는 것 같다.)</p>
</li>
</ol>
<p>∴ BN은 batch에 있는 “모든” sample들에 대해서 “각 feature의 평균과 분산”을 구하여 정규화</p>
<p>batch_size = m
입력 사이즈 = n</p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/97de220e-c34e-4780-9194-ca6aa33df8f9/image.jpg" alt=""></p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>CNN의 배치 정규화</p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/5677cdd4-4c7f-4868-932a-cf320761ab15/image.PNG" alt=""></p>
<ul>
<li>위의 모양으로 입력x와 가중치w의 곱(wixi+b)가 생김</li>
<li>CNN의 경우 컨볼루션 성질을 유지 시키고 싶기 때문에 각 채널을 기준으로 각각의 감마와 베타를 만들게 된다.(★ 채널을 따져야한다.)</li>
</ul>
<p>batch_size = m
필터 사이즈 = p x q
채널 개수 = n</p>
<p><img src="https://velog.velcdn.com/images/code_hsb/post/a52dd75a-99af-42f8-9526-afbfd53ed17c/image.jpg" alt=""></p>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>