<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>3eung_h10n.log</title>
        <link>https://velog.io/</link>
        <description>KMU SW </description>
        <lastBuildDate>Wed, 13 Mar 2024 03:53:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>3eung_h10n.log</title>
            <url>https://velog.velcdn.com/images/3eung_h10n/profile/8671a412-a80e-44c1-8afa-ee8d478933fe/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 3eung_h10n.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/3eung_h10n" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[머신러닝 - 1]]></title>
            <link>https://velog.io/@3eung_h10n/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-1</link>
            <guid>https://velog.io/@3eung_h10n/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-1</guid>
            <pubDate>Wed, 13 Mar 2024 03:53:37 GMT</pubDate>
            <description><![CDATA[<h3 id="경사하강">경사하강</h3>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/049f6364-aa59-4fd3-87cc-55130327843f/image.png" alt=""></li>
<li>위처럼 convex한 함수는 항상 최적의 해를 찾음(local과 global이 같음)<ul>
<li>하지만 실제모델은 저런 모양은 아니다</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3a00c9fc-789b-4a41-b5bd-654b973f450c/image.png" alt=""></li>
<li>경사하강법으로 최적의 해를 찾아도 에러가 크면 다른 모델을 사용해야할 필요가 있다</li>
</ul>
<hr>
<h4 id="batch-gradient-descent">Batch Gradient Descent</h4>
<ul>
<li>모든 트레이닝 데이터를 사용하는 일반적인 방법<ul>
<li>트레인 데이터가 많으면 전부 사용하지 않는 방법도 있긴한데 여긴 없음</li>
</ul>
</li>
</ul>
<hr>
<h4 id="행렬">행렬</h4>
<ul>
<li>(3,2) -&gt; 밑으로 먼저 3</li>
<li>벡터 : nx1형태의 행렬이 벡터</li>
</ul>
<hr>
<h2 id="선형회귀">선형회귀</h2>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2c6a7f30-828a-4fea-ae84-8293961f7e06/image.png" alt=""></li>
<li>선형모델 유지를 위해 제곱형태가 없어야함</li>
<li>세타0를 바이오스로 사용할때 벡터곱에서 1를 곱하는 형식으로 따로 세타0을 더하는 과정을 생략하기도 함</li>
<li>feature의 범위<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/dda73652-e9c6-4944-981b-9d8a88dc5cd6/image.png" alt=""></li>
<li>피처들을 동시에 바꾸기 때문에 범위가 다르면 범위가 큰 피처가 최적해를 잘 찾아가지만 작은 피처는 그렇지 않음</li>
<li>피처들의 범위를 맞춰줘야함 -&gt; feature scaling</li>
</ul>
</li>
</ul>
<hr>
<h3 id="제곱이-있는-선형">제곱이 있는 선형</h3>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ef796901-0538-43f4-90c9-fcfad2efd0a1/image.png" alt=""></li>
<li>x제곱, 세제곱을 x2,x3로 치환하여 평면의 개수를 늘려 선형성을 유지할 수 있음</li>
</ul>
<hr>
<h2 id="분류regression">분류(regression)</h2>
<ul>
<li>loss함수를 로그함수로 사용하는 이유 -&gt; convex형태로 만들어서 local미니멈에 머물지 않게 하기 위해</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b1b5c11b-e2c7-4bc6-8536-fa085605b1c7/image.png" alt=""></li>
<li>정답값이 1, 0일때의 로스함수를 하나로 합친 형태<ul>
<li>y에 1이나 0을 대입할때 뒤, 앞 부분이 날아감</li>
</ul>
</li>
<li>시그모이드 미분(과정?) -&gt; 시그모이드(1-시그모이드)</li>
</ul>
<hr>
<h3 id="군집화clustering">군집화(Clustering)</h3>
<h4 id="k-means">k-means</h4>
<blockquote>
<ul>
<li>랜덤한 점 k개를 찍음 -&gt; 기준점</li>
</ul>
</blockquote>
<ul>
<li><p>모든 점을 기준점중 가까운 기준점에 매칭</p>
</li>
<li><p>매칭된 점들의 평균값으로 기준점을 이동시킴</p>
</li>
<li><p>위의 단계를 평균이 편하지 않을때까지 반복</p>
</li>
<li><p>처음 찍는 기준점의 위치에 따라 결과가 달라질 수 있음</p>
</li>
</ul>
<hr>
<h4 id="nnneural-networks">NN(Neural Networks)</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ac911137-3770-46d7-811e-9e89e7c0a01f/image.png" alt=""></li>
<li>각 색깔에서 하나의 곱셉이 하나의 화살표를 의미<ul>
<li>연결된 모든 선이 결과에 관여함</li>
</ul>
</li>
</ul>
<hr>
<h3 id="bagging-and-boosting">bagging and boosting</h3>
<ul>
<li>bagging<ul>
<li>데이터셋을 여러개 만드는 것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/72debdc0-dd50-4061-8893-f14a54c879aa/image.png" alt=""></li>
<li>분산값이 떨어져서 성능이 향상됨</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Oauth]]></title>
            <link>https://velog.io/@3eung_h10n/Oauth</link>
            <guid>https://velog.io/@3eung_h10n/Oauth</guid>
            <pubDate>Sun, 10 Dec 2023 12:33:41 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="oauth">Oauth</h2>
</blockquote>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/00f0b493-6cd4-493e-84fa-a00ce28e508d/image.png" alt=""></li>
<li>클라이언트가 우리가 만든 서비스, 리소스 오너가 사용자, 리소스 서버는 구글, 카카오등 믿을만한 그런 서버(리소스 오너가 가입되어있음), 어떤 기능을 제공해주는 존재</li>
<li>Oauth는 위 3자간의 관계를 정리한것</li>
</ul>
<hr>
<h3 id="등록">등록</h3>
<ul>
<li>일단 Client가 Resource server에 등록되어야함(이걸 register라고함, client의 아이디와 비밀번호가 같이 저장)</li>
</ul>
<hr>
<h3 id="인증">인증</h3>
<ul>
<li>등록이 끝나면 Resource Owner가 Client에 접속</li>
<li>이때 로그인을 하라고함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/203cddbf-99a5-4d94-b394-5c6cc505aa1e/image.png" alt=""></li>
<li>위처럼 리소스 오너가 클라이언트에 페이스북,카카오등을 통해 로그인을 하면 클라이언트가 보낸 링크로 리소스오너가 리소스 서버로 접속하는것</li>
<li>그럼 리소스 서버는 그 링크를 받아서 링크에 있는 클라이언트 id이 있는지 확인함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/98935e74-6ce0-4ee7-8938-ca3fe121f7a9/image.png" alt=""></li>
<li>있으면 스콥에 해당하는 기능을 허용할건지 물어봄(리소스 서버가 리소스 오너한테)</li>
</ul>
</li>
<li>위의 과정은 리소스 오너의 허락을 받은것</li>
</ul>
<hr>
<ul>
<li>그리고 리소스 서버의 허락도 받아야함</li>
<li>리소스 서버가 리소스 오너에게 임시 코드를 보냄, 그러면 리소스 오너가 그 코드를 가지고 클라이언트에게 접속, 클라이언트는 그 코드를 받아서 리소스 서버로 접속</li>
<li>리소스 서버가 클라이언트가 접속했을때 클라이언트의 id에 해당하는 임시코드가 일치하는지 확인함</li>
<li>임시코드 : authorization 코드</li>
</ul>
<hr>
<ul>
<li>그 다음단계가 엑세스 토큰을 발급하는 것</li>
<li>authorization코드를 지우면서 AccessToken을 리소스 서버가 생성해서 클라이언트에게 보내줌</li>
<li>그 이후엔 클라이언트가 그 토큰으로 접속하면 리소스 서버가 스콥에 해당하는 기능과 유저의 정보를 클라이언트에게 제공하는것</li>
<li>이 기능을 api라고함</li>
</ul>
<hr>
<ul>
<li>refresh token</li>
<li>위의 access token은 수명이 있음</li>
<li>수명이 끝나면 api를 제공받지 못함</li>
<li>그때 위의 과정을 처음부터 안하고 다시 access 토큰을 받게 해주는게 refresh token</li>
<li>access와 refresh를 보통 같이 발급함, api를 제공받을때 access token을 제출하다 수명이 다하면 refresh token을 리소스 서버에게 제출하면 됨</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[정보보호 정리 ]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@3eung_h10n/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sat, 09 Dec 2023 08:40:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="network">Network</h2>
</blockquote>
<ul>
<li><h3 id="arp-level">ARP level</h3>
<ul>
<li><h4 id="arp-spoofing">ARP spoofing</h4>
<ul>
<li>ARP 단계(MAC주소를 속이는것)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ed89cbde-9a03-4554-8353-bdf32cefb63b/image.png" alt=""></li>
<li>라우터인척하거나 서버인척해서 sniffing까지함</li>
</ul>
</li>
<li><h4 id="man-in-the-middle-attack">man in the middle attack</h4>
<ul>
<li>위에서 B가 공격한 방법이 MIMA</li>
</ul>
</li>
<li><h4 id="smurf-attack">Smurf attack</h4>
<ul>
<li>원래 관리자가 서브넷 관리를 위해 만든 전체로 ping보내는 명령어를 공격자가 페킷의 SIP를 희생자의 ip로 설정해서 여러번(매우 많이) 실행하는것</li>
</ul>
</li>
<li><h4 id="packet-sniffingmac-flooding">Packet sniffing(MAC Flooding)</h4>
<ul>
<li>허브, 스위치 나오면서 나온거</li>
<li>허브는 연결된 모든 노드에게 보내고 스위치가 목적지한테만 보냄(이건 매핑 테이블을 통해 가능 이게 꽉차면 기존걸 지워야하고 매핑 테이블에 저장되어 있지 않으면 브로드케스트 해서 허브랑 결국 똑같아짐)</li>
<li><h4 id="공격자가-가짜-mac주소를-만들어-저장하게-만드는-공격그-후엔-허브처럼-변해서-페킷-훔치기-쉬워짐">공격자가 가짜 MAC주소를 만들어 저장하게 만드는 공격(그 후엔 허브처럼 변해서 페킷 훔치기 쉬워짐</h4>
</li>
</ul>
</li>
</ul>
</li>
<li><h3 id="tcpip-level">TCP/IP level</h3>
<ul>
<li><h4 id="ip-spoofing">IP spoofing</h4>
<ul>
<li>출발지 ip(SIP)를 속이는 것(raw socket프로그래밍으로 속이기가 가능)</li>
<li>ip spoofing 때문에 dos, ddos, session hijacking이 가능</li>
<li>ingress/egress 필터로 막을 수 있음<ul>
<li>egress가 밖으로 나가는 페킷을 관리하는거(굿 시티즌 필요해서 달성하기 어려움)</li>
</ul>
</li>
</ul>
</li>
<li><h4 id="session-hijacking">Session hijacking</h4>
<ul>
<li>ip 스푸핑에서는 공격자가 페킷을 가로채는것 까지는 불가능한데 여기선 가능함</li>
<li>세션을 가로채서 공격자가 희생자인척 하고 서버에서 페킷을 보내는것</li>
<li>TCP 세션을 가로채려면 ISN을 알아야함(ip,port,key,time 들어감)</li>
<li>세션 가로채서 sip에 희생자 ip를 넣어서 ip스푸핑 공격도 들어가는거고 희생자가 서버에게 페킷을 보내지 못하게 희생자를 다운 시키기고 싶으니까dos,ddos공격도 사용함</li>
</ul>
</li>
<li><h4 id="injecting-false-routing-information">Injecting false routing information</h4>
<ul>
<li>공격자가 라우터를 점령해서 라우팅 테이블을 망치는 공격</li>
<li>요즘엔 라우터에 key값을 사용해서 메세지랑 같이 해쉬해서 보내면서 방어함</li>
</ul>
</li>
<li><h4 id="port-scan">Port scan</h4>
<ul>
<li>열려있는 포트(열려있으면 취약하니까)를 찾는 공격</li>
<li>TCP연결에서 사용하는 flag비트를 특정하게 설정하면 그에따른 응답이 오는데 이걸 이용</li>
</ul>
</li>
</ul>
</li>
<li><h3 id="firewall">Firewall</h3>
<ul>
<li>얘는 기본적으로 모든 페킷을 다 열어본 뒤 기준에 맞는거만 통과시키거나 방어하는거임</li>
<li>Stateful/Stateless<ul>
<li>연결의 상태를 기억하냐 안하냐의 차이, 일반적으로 stateful이 처리가 빠름, 보안적 측면에서는 떨어질수도 있음</li>
<li>stateful : 한 번의 허용된 연결이나 패킷이 있다면 해당 연결에서 발생하는 페킷도 허용하는 방식</li>
</ul>
</li>
<li>DMZ : 서비스를 위한 웹서버와 보안이 중요한 DB를 방화벽의 다른 쪽에 두는 방식(웹서버가 DMZ에 있음)<ul>
<li>웹서버에서 DB로 가는건 서비스를 위해 필수적인데 위처럼 해두고 DB로 가는쪽은 PORT를 하나만 열어두면 보안이 쉬움</li>
</ul>
</li>
</ul>
</li>
<li><h3 id="high-availability">High Availability</h3>
<ul>
<li>여기서 L4/L7 스위치 나옴</li>
<li>방화벽이 여러개일때 스위치가 알맞은 방화벽으로 보내야함(ip,port로 XOR사용 xor은 순서 바뀌어도 동일해서 오고갈때 같은 방화벽 사용 가능)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b24627e2-2a80-4226-8257-2e64809c1bca/image.png" alt=""></li>
<li>최근에는 위 방법으로 꼭 같은 방화벽 통과 아내도 되게함(커널 단계에서의 세션 동기화라고함)</li>
<li>여기서 라우터 vs 스위치도 나옴<ul>
<li>스위치는 MAC주소 기반이고 라우터가 IP주소 기반(그래서 라우터를 통한 VRRP 로드 밸런싱이 나옴)</li>
</ul>
</li>
<li>VRRP<ul>
<li>모든 라우터가 공통된 가상 IP를 가짐</li>
<li>마스터가 먼저 가상 IP를 사용, 마스터는 주기적으로 슬레이브에게 자기가 살아있다는 메세지를 보냄</li>
<li>살아있다는 메세지가 안오면 슬레이브가 마스터가 죽었다고 판단하고 가상 IP를 사용(마스터가 되는 것), 가용성 달성<ul>
<li>일반적으로 ping을 사용 db에서는 heartbeat</li>
</ul>
</li>
<li>당연히 슬레이브 중 그 다음 누가 마스터가 될지 선정하는 정책이 필요 이걸 Election process라고함)</li>
<li>슬레이브가 쉬는게 맘에 만들면 가상 ip를 여러개 사용할 수 있음 서로가 서로의 마스터이자 슬레이브가 되는 것</li>
</ul>
</li>
<li><h4 id="어떤-지점이-고장났을때-전체-서비스가-실행이-불가능-해지면-그-지점을-single-point-of-failure라고-부름">어떤 지점이 고장났을때 전체 서비스가 실행이 불가능 해지면 그 지점을 single point of failure라고 부름</h4>
<ul>
<li>그걸 제거하기 위해 방화벽, db, 스위치 라우터 다 2개 이상씩두었는데 911때 그걸 한번에 날려버려서 아얘 똑같이 다른 지역에 2개를 만들어버림 -&gt; Disaster Recovery Center, DR센터라고 부름</li>
<li>GSLB -&gt; DR센터 중에서 한가한 서버의 주소를 리턴해줌 그때 TTL도 같이 보냄(TTL이 길면 성능 좋고 짧으면 고장에 잘 대응)</li>
</ul>
</li>
<li><h4 id="가용성-확률-계산해보기">가용성 확률 계산해보기</h4>
</li>
</ul>
</li>
<li><h4 id="intrusion-detection-system">Intrusion Detection System</h4>
<ul>
<li>이상탐지 시스템,</li>
<li>위치, 알고리즘 각각 2개씩 총 4개의 조합이 있음<ul>
<li>위치 : network, host</li>
<li>알고리즘 : signature, anomaly-based</li>
<li>network, signature를 일반적으로 많이 사용</li>
</ul>
</li>
<li>True/False, Positive/Negative 구분할줄 알아야함</li>
<li>Snort<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9b367cb9-3b2b-4546-ae6c-0abf25680254/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>DDOS<ul>
<li>botnet이라는 개념이랑 같이 나옴<ul>
<li>bot master(공격자), bots(감염 피시), C&amp;C서버(bot들을 관리하는 pc)</li>
</ul>
</li>
<li>C&amp;C서버에 bot들이 접속하게 해야함, 똑같은 도메인 네임 생성 알고리즘을 심어서 실행, 주기적으로 바꿈(추적이 어려워짐)</li>
</ul>
</li>
<li>Intrusion Prevention System<ul>
<li>IDS + FW(방화벽)의 개념<ul>
<li>ISN를 중간에서 체크해서 ip spoofing을 하는지 안하는지 검사</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<h2 id="web">Web</h2>
</blockquote>
<ul>
<li><h3 id="web-overview">WEB Overview</h3>
<ul>
<li>http나옴, stateless다 </li>
<li>Request, Reply 메세지 정도 보기</li>
</ul>
</li>
<li><h3 id="web-shell">Web Shell</h3>
<ul>
<li>exe파일을(주로 shell을 실행하는 파일)을 서버가 저장하게 만듬(자소서 같은걸로 위장)</li>
<li>공격자가 브라우저를 통해 위의 exe파일에 접속해 실행하면 공격 성공(위치를 다 알아야해서 어려움)</li>
<li>디렉토리에 실행권한을 제거하거나 확장자명, 파일크기를 제한하는식으로 막아야함</li>
</ul>
</li>
<li><h3 id="cookie">Cookie</h3>
<ul>
<li>클라이언트에 저장, 서버에 같이 내면 쿠키를 사용하여 이전 연결의 정보를 사용가능함(이게 http에 state를 부여하는 역할)</li>
<li>공격자가 쿠키를 가로채면 문제가 생기니까 쿠키의 원래 내용 value와 key를 concat해 해쉬를 씌워 T를 만들고 value에 T를 붙여 같이 보냄</li>
</ul>
</li>
<li><h3 id="session-management">Session management</h3>
<ul>
<li>세션 토큰을 사용해서 사용자의 세션을 유지,관리 하는것</li>
<li>위의 쿠키도 세션 토큰 중 하나고 여러 가지가 있음</li>
<li>여기서 referer라는게 나옴(tcp해더에 클라이언트의 이전 접속 url을 추가해서 보낸것)<ul>
<li>세션 토큰은 아니고 비슷한 역할 가능</li>
<li>서버는 이게 갑자기 바뀌는지 확인 가능하지만 공격자는 역으로 이걸로 클라이언트인척 가능</li>
</ul>
</li>
</ul>
</li>
<li><h3 id="xsscross-site-scripting">XSS(Cross Site Scripting)</h3>
<ul>
<li>피해자가 클라이언트</li>
<li>Persistent(stored), non Persistent(reflected)가 있음<ul>
<li>Persistent는 공격자가 글을 작성(서버에 저장)피해자가 글을 누르면 글에 포함된 악성 코드가 자동 실행</li>
<li>Non, persisten, 검색할때 악성 코드를 주소에 넣어서 검색하게 만들면 그 코드가 바로 실행될 수 있음</li>
</ul>
</li>
<li>HTML sanitization해서 막아야함</li>
<li>Sanitization : 입력부분에서 유해한 부분을 제거하거나 미리 지정한 분자로 치환하게 하는 방법</li>
</ul>
</li>
<li><h3 id="csrf">CSRF</h3>
<ul>
<li>피해자가 서버, 주로 위의 XSS와 같이 많이 사용함 </li>
<li>XSS로 피해자한테 비밀번호 변경 명령을 실행한다고 가정<ul>
<li>비밀번호가 공격자가 지정한 것으로 바뀜</li>
<li>공격자가 피해자의 id, 바꾼 비밀번호로 서버에 접속(만약 권한이 높은 피해자였다면 피해가 심각)</li>
<li>만약 사이트 자체가 비밀번호를 바꿀때 기존 비밀번호도 입력하는 형태였다면 위 명령어에 기존 비밀번호도 들어가야하는 것이라 보안이 좋아짐</li>
</ul>
</li>
</ul>
</li>
<li><h3 id="sql-injection">SQL Injection</h3>
<ul>
<li>웹에서 로그인, 회원가입은 사용자가 빈칸에 입력한 값을 가지고 SQL쿼리문을 만들어 실행하는 건데</li>
<li>빈칸에 악의적인 SQL명령어를 입력하면 이게 실행 되는것</li>
<li>SQL에서 --뒤가 가 주석처리되는걸 이용함</li>
<li>이것도 Sanitization으로 막을 수 있다</li>
</ul>
</li>
<li><h3 id="insecure-direct-object-reference">Insecure Direct Object Reference</h3>
<ul>
<li>url주소를 찍어서 맞춰서 링크를 통해 접속하지 않는 것</li>
<li>관리자 페이지 접속을 위해 admin, manager등의 단어를 많이 사용함, 그래서 관리자 페이지 접속할때는 특정 ip만 허락하는등의 정책 필요</li>
</ul>
</li>
<li><h3 id="access-control-for-administration">Access Control for Administration</h3>
<ul>
<li>위에거랑 이어지는 내용, 관리자 권한에 대해서 잘 관리해라 그런 내용임</li>
</ul>
</li>
<li><h3 id="vulnerability-scanner">Vulnerability Scanner</h3>
<ul>
<li>웹의 취약점을 파악해주는 도구, 취약한 공격방법을 알려줌(양날의 검)</li>
<li>수업에서는 쇼단으로 예시 보여줌</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<h2 id="단어정리">단어정리</h2>
</blockquote>
<ul>
<li>OWSAP : 년마다 이슈였던 공격방식 순위 메기는 곳</li>
</ul>
<hr>
<ul>
<li>SBOM(Software Bill of Materials) : 소프트웨어 만들때 구성요소를 정리해야한다</li>
</ul>
<hr>
<ul>
<li>Dark Web, Tor, Onion Routing : Dark Web이 안좋은 사이트, 접속할때 추적을 피하기위해 p2p를 사용해 목적지 ip를 양파껍질처럼 계속 추가하는게 onion routing, 이걸 사용하기위해 쓰는 특별한 브라우저가 Tor</li>
</ul>
<hr>
<ul>
<li>FDS(Fraud Detection System) : 신용카드 같은게 사용자가 평소 잘 안가는 곳에서 결제되면 의심하는 것</li>
</ul>
<hr>
<ul>
<li>IT, ICT vs OT CPS(Cyber-Physical System). 이란 핵발전소 스턱스넷(stuxnet) : OT CPS가 물리적으로 관리하는 개념, 완벽한줄 알았는데 이란 저기서 USB꽂아버려서 거기있던 악성코드 감염됨</li>
</ul>
<hr>
<ul>
<li>APT(Advanced Persistent Attack) : 긴 시간을 가지고 집요하게 공격하는 방식</li>
</ul>
<hr>
<ul>
<li>사회공학적 기법 : 사회적으로 사람을 이용하는 것</li>
</ul>
<hr>
<ul>
<li>spear phising : 피싱 공격, 이메일이나 문자등</li>
</ul>
<hr>
<ul>
<li>MITRE : MITRE회사가 만든 취약점이나 보안을 평가하는 프레임워크임</li>
</ul>
<hr>
<ul>
<li>BCP (Business Contingency Plan) : 기업의 지속적인 운영을 보장하며 재난이나 위기 상황에서의 영향을 최소화하는 것</li>
</ul>
<hr>
<ul>
<li>제로트러스트 : 기존 보안은 외부에서 내부로 오는 것을 위주로 차단하고 했는데 이거는 내부에 있는 애들도 다 안믿어서 뭐 할때마다 검사하고 인증하는 거임</li>
</ul>
<hr>
<ul>
<li>제로데이 취약점 : 아직 방어방법이나 대응방안이 없는 취약점</li>
</ul>
<hr>
<ul>
<li>공급망 공격 : 공급망이 여러 회사를 거치니까 그 중에 하나를 공격하면 공급망 전체가 망가진다는 개념</li>
</ul>
<hr>
<ul>
<li>SOAR(Security Orchestration, Automation and Response) : 보안 사건이 발생하면 기록하고, 이를 활용해 대응 프로세스를 자동화해 실행하자는 것</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘 - 10(String Matching)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-10String-Matching</link>
            <guid>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-10String-Matching</guid>
            <pubDate>Tue, 05 Dec 2023 05:44:50 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="string-matching">String Matching</h2>
</blockquote>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e27c49dd-bf43-43d1-aa74-1900a1efb38b/image.png" alt=""></li>
<li>단어를 찾아라</li>
</ul>
<hr>
<h4 id="naive-algorithm">Naive Algorithm</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/71cd311a-4be7-4e8f-8485-d5b7cb148548/image.png" alt=""></li>
<li>한칸씩 밀면서 모든 글자를 다 비교함 O(MN)<ul>
<li>여기서 패턴 길이만큼 다 비교안하고 다른글자나오면 다음 위치로 미는 식으로 할 수 있음</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5ab8a754-7e60-417a-b705-1ac719be651d/image.png" alt=""></li>
<li>패턴의 길이와 j가 같아지면 종료</li>
</ul>
<hr>
<ul>
<li>위에서 한칸씩 비교하다 다른 글자가 나오면 시작위치를 뒤로 돌리는걸 roll-back이라고 하는데 이게 없어야 시간을 줄일 수 있음</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/743f87dc-b42a-48f5-8291-e7ea5397db83/image.png" alt=""></li>
</ul>
<hr>
<h4 id="dfadeterministic-finite-state-automaton">DFA(Deterministic Finite State Automaton)</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/af0efa67-2653-480a-a523-42dc51366781/image.png" alt=""></li>
<li>하나의 state에서 특정 문자가 왔을때 갈수 있는 다른 state가 단 1개로 명확하기 때문에 Deterministic이라 함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ab244f6a-860b-4767-9d16-088402a29866/image.png" alt=""></li>
<li>0에서 A가오면 1로, 6에서 B가오면 4번으로</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/817313ea-6a01-4ea9-9165-9c583623de0b/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/da751f0a-53c0-4bd4-9d7f-7dc06fcf4743/image.png" alt=""></li>
<li>선이 없으면 무조건 처음으로 가는식으로 그림 간소화</li>
<li>이거는 DFA가 만들어졌다고 가정한것, 만들어져만 있으면 O(N), roll-back이없음</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/730c2e3b-b210-4262-a80e-6fd9118a4ba9/image.png" alt=""></li>
<li>DFA 사진 한장으로 요약</li>
</ul>
<hr>
<h4 id="dfa-construction">DFA Construction</h4>
<ul>
<li>위는 DFA가 만들어졌다고 가정 후 한것, DFA는 어떻게 만들것인가</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9ae42da2-912c-42f5-bb4e-d236859ec171/image.png" alt=""></li>
<li>미스매치가 일어난 지점(j라고하면)의 문자를 패턴의 1번부터 j-1까지 갔을때의 스태이트를 j가 왔을때의 위치임</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/7a29216a-5040-4d01-b82a-b613c5bc6982/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/369c84ec-c02c-4873-a6ac-d5c8d8c4bc9d/image.png" alt=""></li>
<li>스테이트에서 미스매치가 일어나면 1번 문자(BABA부터)를 스테이트 0번부터 돌려서 최종적으로 위치한 곳(X)에서 미스매치가 일어난 문자를 한번더 한 state가됨</li>
<li>X위치(BABA해서 위치한 곳)을 매번 구하는게 아님</li>
<li>6번에서 미스매치되면 X의 위치는 0번 스테이트에서 BABA대신 BABAC를 한것 이전 X에서 한번만 더하면 됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e09fc781-a0fc-439e-894d-636b5abb36a5/image.png" alt=""></li>
<li>X의 갱신은 이전 X에서 패턴의 그다음 글자 하나를 추가</li>
<li>일단 제일 왼쪽 초기화, 다음 줄은 이전 x번 줄을  복사(미스매치) 그 후 매칭되는 알파벳 갱신, x를 이전 x값에서 이번에 매칭된 알파벳을 넣는것으로 갱신</li>
</ul>
<hr>
<h3 id="kmp">KMP</h3>
<ul>
<li>prefix, suffix<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/53bd30c2-b1fc-4e20-ab5a-9747c2f0caa9/image.png" alt=""></li>
<li>NULL과 전체 단어도 접두사,접미사에 해당됨</li>
</ul>
</li>
<li>미스매치 후에 그 다음 시작위치를 그냥 틀린위치부터 하자는 아이디어<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/afd7b2dd-3cbd-4d3a-a440-8823c9557f49/image.png" alt=""></li>
</ul>
</li>
<li>텍스트의 시작을 트린위치에서 하는거고 추가로 패턴매칭은 처음부터 안하고 패턴의 시작과, 이전에 매칭했던 곳에서 같은 부분은 건너띔<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1245bd07-c70a-498b-8b80-eacc5cb794ff/image.png" alt=""></li>
<li>매칭하다 틀린 부분의 바로 앞을 기준으로 짜르고, 그것의 prefix, suffix가 겹치는 부분만큼 부터 다시 시작(0칸이나, 전체는 뺴고)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/83047154-a878-45e7-9d9e-cc9e8a90d462/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/df697e49-1222-4a3d-a81f-79578ff4474f/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f889f485-9429-4e4a-9e4f-e98e4e20c430/image.png" alt=""></li>
<li>틀리면 텍스트는 롤백을 맥시멈 오버랩부터 하지만 매칭은 틀린곳부터 해도됨, 패턴은 맥시멈 오버롤의 길이의 다음 위치부터 매칭하면 됨</li>
<li>fail펑션<ul>
<li>패턴에서 실패한 위치에 따라 멕시멈 오버랩을 구하는 것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9a195ac7-6f8c-46ef-af2f-0f3a6f7528c3/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f4ae869c-3877-4b96-a7eb-70d733cec06d/image.png" alt=""></li>
<li>이거 할줄알기</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d25965d0-18c6-4a79-80e6-4fac1601484f/image.png" alt=""></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[정보보호 - 9(websecurity)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8-9websecurity</link>
            <guid>https://velog.io/@3eung_h10n/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8-9websecurity</guid>
            <pubDate>Thu, 30 Nov 2023 02:36:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="websecurity1">Websecurity(1)</h2>
</blockquote>
<hr>
<h4 id="http-web">http, web</h4>
<ul>
<li>web : TCP에서 동작<ul>
<li>HTTP로 동작한다<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ef0d5091-1117-431e-bbdd-8b3e0afd30c2/image.png" alt=""></li>
</ul>
</li>
<li>HTTP는 stateless 프로토콜임<ul>
<li>http로 페이지를 하나보고 다른 페이지로 갈때 하이퍼링크를 누르면 새로운 http를 읽어들어야 함(행동행동이 연관이 없어서 stateless)</li>
</ul>
</li>
<li>stateless는 웹 쇼핑 같은 기능을 구현이 불가능해서 http에 쿠키가 세션을 붙여서 사용하는데 공격자가 이 쿠키, 세션을 훔치는 공격이 존재함</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c8d8c738-3b78-4a0d-a1cf-c7297fd1deca/image.png" alt=""></li>
</ul>
<hr>
<h3 id="web-shell">Web shell</h3>
<ul>
<li>MITRE : 전세계의 취약점을 공통된 이름으로 정리하는 단체
 CWE-434로 web shell을 구분지음</li>
<li>web shell은 웹 서버의 exe파일을 클라이언트가 접속할때 발생<ul>
<li>공격자가 올린 파일(지원서로 위장한 exe 파일 등)을 서버가 지원서로 착각해 디렉토리에 저장하고 공격자가 서버의 디렉토리에 접속해서 실행시키는 공격</li>
<li>exe파일을 보통 shell실행 코드로 보내서 web shell공격이라고 부름(shell이 실행되면 취약하기 떄문)</li>
</ul>
</li>
<li>countermeasure<ul>
<li>파일을 업로드 하지 못하게 하면 차단되지만 업로드를 해야만 하는 경우 확장자명이나 파일 크기의 제한을 두는 방법으로 방어</li>
<li>디렉토리의 실행권한을 제거</li>
</ul>
</li>
</ul>
<hr>
<h3 id="cookie">Cookie</h3>
<ul>
<li>stateless인 http를 state를 유지하고 싶어서 만듬(보안을 고려하지 않았음)</li>
<li>보안을 고려한 쿠키 생성방법<ul>
<li>쿠키에 integrity체크를 위한 T(태그)를 붙임</li>
<li>서버에서 쿠키를 생성할때 키 k와 원래 쿠키의 내용인 value를 concat후 해쉬, 이걸 T로 사용</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/49f1062b-b29e-4946-8614-5cc6bb4fab35/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h3 id="session-management">Session management</h3>
<ul>
<li>이것도 http의 state를 부여하고 싶어서 만듬</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5acf5123-693c-423c-81fb-3e5ba6c0c6c6/image.png" alt=""></li>
<li>세션을 만들고 페킷을 주고 받을때 위에서 referer는 클라이언트가 서버로 GET명령을 실행할때 이전에 접속했던 사이트 주소를 같이 보내질수 있다(보안측면에서 안좋을 수 있음)</li>
<li>referer필드로 해커가 클라이언트인척 하는지 체크할 수도 있다는 측면도 있음</li>
</ul>
<hr>
<ul>
<li>Session hijecking<ul>
<li>http레벨에서의 하이제킹</li>
<li>공격자가 정상적인 클라이언트와 서버의 통신 과정에서 쿠키값이나 세션정보를 빼와 클라이언트인척 서버에 명령어를 내리고 서버가 응답해주는 것</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/81349709-1b7b-4eb3-b48f-bc53b0374019/image.png" alt=""></li>
<li>SID를 만들때 규칙적으로 하지말고, 서버만아는 k로 해쉬 만들기, http는 application단계인데 ip주소도 사용해서 보안을 강화할수도 있음 </li>
</ul>
<hr>
<h3 id="xsscross-site-scripting">XSS(Cross-Site-Scripting)</h3>
<ul>
<li>피해자가 클라이언트</li>
<li>CEW-79라고 이름 지어져있음</li>
<li>어떤 입력이 들어왔을때 입력내용중 공격내용이 들어오면 무시해줘야함 -&gt; 이게 Newtralization</li>
<li>데이터는 보통 data와 control로 나누는데 100+100을 실행한다고 하면 100,100을 data +를 control로 보는 것, write,read등의 명령어도 control임</li>
<li>user의 인풋중 control 부분을 잘 처리하지(newtralization)하지 못하게 하는것이 XSS</li>
<li>code injection이라고도 볼 수 있음</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6c7b8eab-f4fa-4eab-8e74-64209ad4b884/image.png" alt=""></li>
</ul>
<hr>
<ul>
<li>정상적이면 클라이언트가 웹 서버에 접속하면 alert등의 control명령어가 실행됨</li>
<li>Persistent XSS<ul>
<li>공격자가 웹 서버에 악의적인 control 명령어(쿠키 정보를 어디로 보내라 등의)가 들어간 글을 작성함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b31ef357-e8f2-40d2-9c61-df177fa8a97f/image.png" alt=""></li>
<li>유저가 게시글을 읽으면 명령어가 실행됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c8df4c59-754c-4bcb-8fbb-7b307e6fb7de/image.png" alt=""></li>
</ul>
</li>
<li>게시글이 서버에 저장되어있다해서 Persistent라고 함</li>
</ul>
<hr>
<ul>
<li>Non-persistent XSS(reflected xss)<ul>
<li>주로 URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식 공격자가 HTTP 요청에 악성 콘텐츠를 주입하면 그 결과가 사용자에게 반사되는 형태</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bddfb988-52c7-4671-b5d6-bd887965772c/image.png" alt=""></li>
<li>sanitization <ul>
<li>입력부분에서 유해한 부분을 거부하거나 미리 지정한 문자로 치환하는 방법</li>
</ul>
</li>
<li>그냥 script를 전부 사용하지 못하게 할수도있음(서비스보단 아주 강한 보안이 필요할경우)</li>
</ul>
<hr>
<blockquote>
<h2 id="websecurity2">Websecurity(2)</h2>
</blockquote>
<hr>
<h3 id="csrfcross-site-request-forgery">CSRF(Cross-Site Request Forgery)</h3>
<ul>
<li>one-click attack or sessin riding이라고도 부름</li>
<li>피해자가 서버임</li>
<li>공격자가 서버가 신뢰하는 유저가 명령어를 서버에게 실행하도록 함</li>
</ul>
<hr>
<ul>
<li>클라이언트가 비밀번호를 바꾸는 명령어를 활용한 공격<ul>
<li>이전 비밀번호를 입력하지 않는 경우 -&gt; CSRF에 취약</li>
<li>공격자가 일단 쿠키나 세션정보를 탈취했다고 가정(그래서 일반적으로 CSRF 이전에 XSS로 이것을 달성함) <ul>
<li>이 쿠키를 사용해서 공격해도되고 그냥 XSS로 바로 실행하게도 함</li>
</ul>
</li>
<li>공격자가 클라이언트가 악성 명령어를 서버에게 실행하게 하면 서버는 이것을 믿어 실행해주면서 문제가 발생</li>
<li>이때 명령어를 비밀번호 변경 명령어를 실행하는 것<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c05020e0-d151-49c8-8511-763c216c255f/image.png" alt=""></li>
<li>위와같은 멸령어에 기존 명령어의 입력이 들어가지 않으면 위같은 쿼리를 예측당하기 쉬워 취약한거임</li>
</ul>
</li>
<li>클라이언트가 서버 관리자라고 가정하면 매우 치명적이게 됨 그 비밀번호를 공격자가 알게되기 때문</li>
</ul>
</li>
</ul>
<hr>
<h3 id="sql-injection">SQL Injection</h3>
<ul>
<li>SQL 쿼리에 입력되는 데이터의 Sanitize를 실패한 것</li>
<li>이것도 code injection</li>
<li>Injection : 데이터가 아닌 어떤 control명령어를 강제로 주입하는 형태</li>
</ul>
<hr>
<ul>
<li>SQL명령어</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ecf58a4f-3d23-4caa-bc10-e03808bf359a/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/64afdaae-b32a-4499-86fc-9176352ffaf7/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6c74279b-0c96-44e2-aa1b-c0704dc08b5c/image.png" alt=""></li>
<li>웹에서 빈칸에 입력하는 내용이 sql쿼리문에 들어가서 실행됨</li>
<li>저 칸에 다른 어떤 명령어가 실행되도록 입력하면 sql쿼리에서 변수 대신 명령어 값이 들어가고 이상한 명령어가 실행되게됨</li>
<li>id또는 password에 or &#39;1=1&#39; --를 입력한 경우?<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a7622fca-e051-44c7-bfe8-b29aa0974b6b/image.png" alt=""></li>
<li>sql에서 --는 주석임</li>
<li>저러면 id,password에 상관없이 모든 id,password를 가져오게됨</li>
</ul>
</li>
<li>select말고 다른 명령어를 사용하면 더 치명적일 수 있음<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/4a7974c8-0bfa-4b4a-bf3c-1fb5e09537d6/image.png" alt=""></li>
</ul>
</li>
<li>Countermeasure<ul>
<li>&#39;,&#39;&#39;,/,; 등의 특수문자를 사용 못하게</li>
<li>에러 메시지를 보여주지 말기</li>
<li>권한부여를 제한적으로</li>
</ul>
</li>
</ul>
<hr>
<h3 id="insecure-direct-object-reference">Insecure Direct Object Reference</h3>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f0d3df36-c392-4534-a304-ed67cc398a13/image.png" alt=""></li>
<li>링크를 눌러서 정상적으로 접근해야 하는데 url을 찍어서 맞추는것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d3d8ef7d-283f-4ef3-ae9e-dcb3917ed430/image.png" alt=""></li>
<li>이런식으로 많이 시도함</li>
<li>그래서 admin, manager권한을 접속할때 잘 관리해야함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9b31408a-5ae7-4067-befe-f29016ad6d25/image.png" alt=""></li>
<li>특정 ip에서 접근 가능하게 하는식으로</li>
</ul>
</li>
</ul>
<hr>
<h3 id="vulnerability-scanner">Vulnerability Scanner</h3>
<ul>
<li>웹의 취약점을 파악해주는 도구</li>
<li>취약한 공격방법을 알려줌</li>
</ul>
<hr>
<h3 id="owsap">OWSAP</h3>
<hr>
<h3 id="단어">단어</h3>
<ul>
<li>SBOM<ul>
<li>개발자들은 소프트웨어의 각 부분에 대한 목록을 작성하여 소프트웨어 부품 목록을 구성하고, 이를 통해 보안 취약점을 식별하고 관리할 수 있습니다.</li>
</ul>
</li>
<li>Dark Web, Tor, Onion Routing<ul>
<li>onion routing -&gt; Dark web으로 가기위한 페킷에 p2p를 계속 이어 목적지 ip를 계속 쌓는 것 이를 위해 특별한 브라우저가 필요한데 이게 Tor</li>
</ul>
</li>
<li>FDS<ul>
<li>신용카드 정보등이 엉뚱한 곳에서 결제가 되는 등을 추적하는것</li>
</ul>
</li>
<li>IT,ICT vs OT CPS<ul>
<li>OT CPS : 인터넷 환경을 끊고 물리적 프로세스로 제어</li>
<li>인터넷이 끊어서 보안이 완벽하다 생각했지만 이란 핵발전소가 USB로 악성코드 감염이 된 사례가 있음</li>
</ul>
</li>
<li>APT<ul>
<li>긴 시간을 가지고 집요하게 공격하는 방식</li>
</ul>
</li>
<li>사회공학적 기법<ul>
<li>사회적으로 사람을 이용하는 것</li>
</ul>
</li>
<li>spear phising<ul>
<li>피싱 공격, 이메일이나 문자등</li>
</ul>
</li>
<li>MITRE<ul>
<li>공격의 단계를 체계를 만들어 테이블로 만듬, 보안 대첵을 개발할때 사용</li>
</ul>
</li>
<li>BCP<ul>
<li>백업 센터</li>
</ul>
</li>
<li>제로데이 취약점<ul>
<li>아직 대첵이 발견되지 않은 취약점</li>
</ul>
</li>
<li>제로트러스트<ul>
<li>서버에서 접근제어 정책을 두는것</li>
</ul>
</li>
<li>SOAR(Security Orchestration, Automation and Response)<ul>
<li>보안 사건이 발생하면 기록을 해두고 이를 활용해 대응 프로세스를 자동으로 실행하도록 하는 것</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[소프트웨어 아키텍처 - 30(Interaction-Oriented
Software
Architectures)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-30Interaction-OrientedSoftwareArchitectures</link>
            <guid>https://velog.io/@3eung_h10n/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-30Interaction-OrientedSoftwareArchitectures</guid>
            <pubDate>Mon, 27 Nov 2023 12:22:18 GMT</pubDate>
            <description><![CDATA[<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/7f789d58-924e-4987-9acb-4cc765287dc0/image.png" alt=""></li>
<li>구조<ul>
<li>시스템을 데이터 모듈, 컨트롤 모듈, 뷰 프레젠테이션 모듈로 분해하는 구조</li>
<li>data 모듈<ul>
<li>데이터 추상화와 데이터 처리에 관한 로직을 제공</li>
</ul>
</li>
<li>control 모듈<ul>
<li>뷰 선택, 모듈 간 통신, 작업 디스패치 등 초기화 및 시스템 구성 작업과 관련된 제어 흐름 결정</li>
</ul>
</li>
<li>View presentation 모듈<ul>
<li>시각적이거나 오디오 데이터 출력을 담당필요할 경우 사용자 인터페이스 제공</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/aa3800a4-badf-4065-a969-bb5eaee5241c/image.png" alt=""></li>
<li>특징<ul>
<li>주요특징은 사용자 상호작용을 데이터 추상화 및 데이터 처리와 분리하는 것</li>
<li>데이터 추상화와 프레젠테이션 간의 느슨한 결합</li>
<li>느슨한 결합은 명시적인 메서드 호출이나 암시적인 등록, 알림 메서드 호출과 같은 방식으로 구현</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d10fef0c-5bfb-4367-8725-31b8b58dce7c/image.png" alt=""></li>
<li>interaction-oriented 아키텍처의 주요 2가지 스타일<ul>
<li>MVC, PAC</li>
<li>둘다 상호작용 및 사용자 작업이 있는 대화형 응용 프로그램에 사용</li>
<li>제어 흐름과 조직에서 차이가 있음</li>
<li>PAC<ul>
<li>에이전트 기반의 계층 구조 아키텍처</li>
</ul>
</li>
<li>MVC<ul>
<li>계층 구조가 없으며 세 모듈이 모두 연결되어 있는 구조</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 과학 - 11(PCA)]]></title>
            <link>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-11PCA</link>
            <guid>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-11PCA</guid>
            <pubDate>Mon, 27 Nov 2023 02:22:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="principal-component-analysis">Principal Component Analysis</h2>
</blockquote>
<ul>
<li>주 성분 분석<ul>
<li>데이터의 분포를 결정하는 핵심 성분을 찾는 것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/243ff1b6-6942-42ba-a28c-19436692d7a5/image.png" alt=""></li>
<li>다차원 데이터에서 핵심성분을 찾아 1차원으로 표현할 수 있음</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1c1d4577-11d0-4254-b55f-24a0ae2674d1/image.png" alt=""></li>
<li>공의 위치를 결정하는 주 성분은 스프링의 힘, 1차원으로 표현</li>
</ul>
</li>
<li>주성분 분석은 수학적으로 분산을 최대화하면서 서로 직교하는 새로운 축을 찾는 것<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1d95e65f-3eb7-41d1-b3bf-2f728a9f12c0/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>차원 축소 방법<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8d926f54-648e-419e-aad2-42119042baf3/image.png" alt=""></li>
</ul>
</li>
<li>방법 1)<ul>
<li>아무 차원이나 지우기</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/77046936-3465-4cce-990f-5256445ba8bc/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6851cce1-357a-4725-89ea-f5491d60ae70/image.png" alt=""></li>
<li>위 중에서는 2번째가 분산이 더 커서 좋다</li>
</ul>
</li>
<li>방법 2)<ul>
<li>새로운 축을 찾기 </li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/0e5a56e0-98be-4924-b858-06799439cd6d/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>주성분 찾기</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/4d4b975b-9cca-4c13-afca-10fb01e6818b/image.png" alt=""></li>
<li>주황색이 x</li>
<li>주황색 데이터를 벡터 A를 사용해 선형변환 시킨 것(Y  = XA)<ul>
<li>이때 벡터 A를 찾아야 하는 것</li>
</ul>
</li>
<li>Y = XA의 주성분은 A의 고유벡터<ul>
<li>Av =  λv를 만족하는 v가 고유벡터이고  λ는 고윳값이라 함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2bce6ab4-a466-4c06-9cdd-48a3ebce3b30/image.png" alt=""></li>
</ul>
</li>
<li>1) 일단 Y에대한 A를 구해야 함<ul>
<li>Y의 공분산 행렬을 사용</li>
</ul>
</li>
<li>2) A의 고유벡터 구하기<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e9c759fd-af93-459a-b325-d553f8f2b079/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>주성으로 데이터 표현</li>
<li>pc1, pc2를 찾고 2개르 축으로 사용<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ec214fad-e5ae-42cc-a26b-bb2d603584d0/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>최종 주성분</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f8fed86a-5643-44ac-a5de-a26bdbe43f19/image.png" alt=""></li>
<li>pca를 더 찾을수록 일반적으로 분산이 줄어듬</li>
<li>0에 수렴하기 전까지의 pca까지를 주성분으로 사용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 비전 - 15(modelcomp)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-15modelcomp</link>
            <guid>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-15modelcomp</guid>
            <pubDate>Wed, 22 Nov 2023 05:32:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="deep-model-compression">Deep Model Compression</h2>
</blockquote>
<hr>
<h4 id="knowledge-distillation지식-증류">Knowledge Distillation(지식 증류)</h4>
<ul>
<li><p>메모리, 전력을 효율적으로 사용하면서 성능을 유지하기 위해 나온 것이 Model compression</p>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/90857992-62dd-4e66-8456-6f2058adfd1a/image.png" alt=""></li>
</ul>
</li>
<li><p>레이어가 더 많은 네트워크에서 적은 쪽으로 정보를 내줌(일반적으로 레이어가 많으면 성능이 좋다)</p>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/720d85dd-1794-4e37-8754-56eec6573307/image.png" alt=""></li>
<li>Teacher의 정보를 활용해 Student를 학습</li>
</ul>
</li>
<li><p>모델을 경량화</p>
</li>
<li><p>처음엔 teacher의 마지막 아웃풋을 student에게 전달하는 방법으로 구현했었음</p>
</li>
<li><p><img src="https://velog.velcdn.com/images/3eung_h10n/post/4aa3d910-9394-4adf-bfbc-8e078d023099/image.png" alt=""></p>
<ul>
<li>위는 소프트맥스를 합은 항상 1이 되면서(확률이기 때문) T로 나누어 y값의 차이를 줄여 평평하게 만듦<ul>
<li>teacher의 아웃풋을 평평하게 만들어 정답값으로 쓰는 것</li>
<li>teacher에서 강아지라고 100% 확인했지만 강아지의 특성 중 늑대와 비슷하거나 털이 있는 등의 특성을 사용하기 위해 T를 사용하는 것</li>
<li>T의 값이 클수록 평평해짐(평평할수록 다른 특성을 더 많이 보겠다는 의미)</li>
</ul>
</li>
</ul>
</li>
<li><p>attention map</p>
<ul>
<li>정보를 넘겨줄때 픽셀의 값을 모두 더해서 한장으로 만들어서 넘겨주기</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/98e24102-60a4-4771-addd-abf924e98d36/image.png" alt=""></li>
<li>위에서 가로세로 각 픽셀마다 C장 만큼 절대값으로 다 더해서 같은 가로세로 크기의 attention map을 만들어서 넘겨줌</li>
<li>중간중간 피처를 넘겨주는 의미</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5b25f618-94e2-4770-85c2-bdbe6a3bd200/image.png" alt=""></li>
</ul>
</li>
<li><p>Factor Transfer</p>
<ul>
<li>teacher, student의 레이어, 피처의 크기와 개수가 다른데 teacher만의 결과를 넘겨주는것은 알맞지 않다고 생각하여 나온 방법</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8502a552-94a1-474f-a340-aae2d23522e7/image.png" alt=""></li>
<li>각각의 결과를 모듈을 통과시켜 크기를 중여 factor로 추출</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3c1dd130-6f66-42d9-8db8-5edcf4ac7aea/image.png" alt=""></li>
<li>teacher의 결과를 압축후 다시 복원했을때 압축전과 복원 후의 결과가 비슷하면 할수록 가운데의 크기가 가장 작은 부분은 원본의 특징을 가장 잘 표현했다고 말할 수 있음</li>
<li>이것은 teacher의 결과를 잘 표현하면서 크기를 잘 줄여준것임</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/82a3fc92-7bda-404a-91f4-1e80ee8a75fd/image.png" alt=""></li>
<li>student도 학습후 결과를 factor로 압축하고 teacher와 student의 factor의 차이를 줄여서 사용</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d47cc603-bff5-434d-8f43-316fb84b5cc7/image.png" alt=""></li>
<li>FT의 성능<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f0cb17aa-3c54-467f-b2dd-617981a20d88/image.png" alt=""></li>
<li>k : 압축 작으면 압축을 더 많이 한것(압축을 많이한다는 것은 factor의 크기가 작아지는 것)</li>
<li>ST는 teacher를 활용하지 않는 결과</li>
<li>일반적으로 압축을 많이하고 teacher의 정보를 활용한것이 성능이 좋음</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="quantization양자화">Quantization(양자화)</h4>
<ul>
<li>연속적인 신호를 디지털화 하는 것<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5319c428-84c9-48f9-999b-6ddf8c553f11/image.png" alt=""></li>
<li>Full precision : 32비트 체제라하면 32비트를 모두 사용 하는 것</li>
<li>Low Precision : 32비트 중 8비트정도만 사용한다하면 히스토그램에서 막대의 개수가 2^32에서 2^8로 줄어드는 것</li>
</ul>
</li>
<li>연산량을 줄임</li>
<li>크게 QAT, PTQ로 나눔<ul>
<li>QAT(Quantization Aware Training)<ul>
<li>최대 성능(FP))를 학습하고 난 후 양자화된 데이터를 가지고 더 학습함 </li>
</ul>
</li>
<li>PTQ(Post-Training Quantization)<ul>
<li>FP를 학습하고 난 후 그 결과를 활용해 양자화하는 방법</li>
</ul>
</li>
<li>FP는 무조건 하고 그 후에 둘 중 하나를 사용함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5155f9c1-7708-40b1-98e4-a25b1434049d/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>QAT가 성능이 좋긴하지만 학습하는데 시간도 오래걸리고 어려움 PTQ는 학습없이 한번의 알고리즘을 돌리면 사용가능해서 빠름(성능은 떨어질 수 있음)</li>
<li>PSGD<ul>
<li>처음부터 정밀도가 낮은 모양으로 학습을 시키는것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/75c9d6e3-40dc-4cd0-8e49-69ea980e26db/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/73d116b3-d0c0-4477-aa5a-4e8d930146ad/image.png" alt=""></li>
<li>W를 양자화시킬때 막대가 노란색 점에 있어야함</li>
<li>위에서 별표가 W가 양자화된 위치라 할때 노란점 근처에 있으면 양자화가 잘 되었기 떄문에 업데이트시 움직이지 않게 하고 노란점에서 멀면 양자화가 잘 안된 것이라 판단해 다음 업데이트시 많이 움직이게 만듬</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a2ae8e4c-0356-44c1-8ca6-925828ba8197/image.png" alt=""></li>
<li>S(X)가 노란점과의 거리, 밑의 식에서 거리만큼 곱해져서 움직이게 됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8e0eded8-9fd0-4b1d-9ff5-52720dfa7ab7/image.png" alt=""></li>
<li>왼쪽그림은 둘다 FP임 2개를 양자화 시켜 비트수를 줄인것이 오른쪽<ul>
<li>처음 학습할떄부터 양자화를 고려하면 에러가 줄어듬</li>
<li>처음부터 몇비트로 양자화할지 알아야 가능한 방법이라는 단점이 있음(노란점의 개수를 정해줘야 하기 떄문)</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5937501d-aa11-4aa6-aa12-530df06e3c5a/image.png" alt=""></li>
<li>양자화 할때 여러 값을 0으로 만든것인데 그럼에도 성능이 나온다면 pruning효과까지 얻은것</li>
<li>PSGD는 처음부터 양자화후의 모습과 유사하게 학습하기 때문에 학습 완료 후 바로 양자화가 쉬움(타켓 비트를 가지고 학습하기 떄문에 타겟 비트로 양자화하면 성능이 잘 나옴)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/234b7cc1-464a-42ce-8a33-df879dd8218c/image.png" alt=""></li>
<li>On-the-fly quantization(타겟 비트로 한번에 양자화)해도 성능이 잘 나옴</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/4501414e-fa06-4649-ae19-bd2950bea66d/image.png" alt=""></li>
<li>처음 학습시 양자화에 친숙하게 학습하기 때문에 PTQ를 섞어써도 성능이 잘 나옴</li>
</ul>
</li>
</ul>
<hr>
<h4 id="pruning">Pruning</h4>
<ul>
<li>중요하지 않은 웨이트를 지우는 것(0으로 만드는 것)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9f72eaed-9fe6-4ec2-8ffc-e21adb6025df/image.png" alt=""></li>
<li>Unstructed pruning : 필터 안에서 웨이트를 지우는 것</li>
<li>Structed pruning : 여러개의 필터중 특정 필터를 통채로 날림</li>
<li>일반적으로 절대값의 크기가 작은 것을 지움<ul>
<li>방법은 여러가지가 있다</li>
</ul>
</li>
<li>One-shot or Iterative<ul>
<li>한번에 원하는 만큼 크기를 줄이거나 점차적으로 하는것에 따라 나누어짐</li>
<li>Iterative는 조금씩 줄이면서 중간중간 학습을 다시하기 때문에 결과가 한번에 줄이는것과 달라짐(일반적으로 성능이 좋음)</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/087d18d5-aa15-4742-8fc3-6749f1f1fea3/image.png" alt=""></li>
<li>햇을 씌운게 프루닝을 하고난 후의 결과<ul>
<li>갱신할때 프루닝을 안한 것을 프루닝을 한걸로 갱신하는게 말이 안되기 때문에 채인룰을 사용한 것</li>
<li>파란 동그라미는 마스크를 의미함(w햇이 wx마스크인데 w햇에 대해 미분했기 때문)<ul>
<li>실제 마스크값을 곱하면 마스크가 0이면 업데이트가 전혀 안됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/12cd1180-8fd2-45a5-a60a-571d4d132aa6/image.png" alt=""></li>
<li>그냥 마스크값을 1로 만들자는 방법(Dynamic Prining)</li>
</ul>
</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/045d949b-08e7-4ed2-bc72-9cd402aebc7d/image.png" alt=""></li>
<li>위에서 다 1로 만든것이 파란색(dpf)<ul>
<li>성능이 요동치게 됨</li>
</ul>
</li>
<li>마스크가 1일때 실제로 업데이트 하는것은 트루 업데이트(문제가 안됨)</li>
<li>그런데 마스크가 0인데 실제로 업데이트 한 경우는?<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6ed08a69-cff6-4e39-86cf-93930c5403fd/image.png" alt=""></li>
<li>뒤의 식에서 M은 마스크의 값 0이거나 1, 마스크가 1이면 마스크를 씌운 후 값인 w햇을 업데이트하고 마스크가 0이면 그냥 w를 업데이트함</li>
<li>dpf를 개선한것(dpf 위의 파란색은 뒤의 식 부분에서 마스크가 0이어도 w햇을 업데이트 한거임)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c78b689a-3ce6-4971-9209-04e6b323f5cd/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘 - 9(Graph Algorithm)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-9Graph-Algorithm</link>
            <guid>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-9Graph-Algorithm</guid>
            <pubDate>Tue, 21 Nov 2023 05:43:51 GMT</pubDate>
            <description><![CDATA[<h4 id="directed-undirectd">directed, undirectd</h4>
<ul>
<li>undirected(방형성이 없음)<ul>
<li>보통 일반적인 그래프</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1f820195-5000-408c-97a7-4a07ea41ff91/image.png" alt=""></li>
<li>V 2개에 E 1개</li>
<li>각각을 집합으로 표현 {}</li>
</ul>
</li>
<li>directed(방향성이 있음)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c822bda8-81a7-4e13-b4cf-56cf37f9b355/image.png" alt=""></li>
<li>엣지를 집합으로 표현하지 않았음 ()</li>
</ul>
</li>
</ul>
<hr>
<h4 id="특성">특성</h4>
<ul>
<li>complte 그래프<ul>
<li>모든 V쌍에 대해 엣지가 다 연결됨<ul>
<li>V가 n개면 E는 n(n-1)/2개</li>
</ul>
</li>
</ul>
</li>
<li>인접<ul>
<li>v,w를 잇는 엣지가 있으면 v,w는 인접하다고 할 수 있고 vAw로 표시한다(adjacency)</li>
</ul>
</li>
<li>경로 Path<ul>
<li>중간 경로가 distinct(중복이 없는)한 엣지의 집합</li>
</ul>
</li>
<li>connected<ul>
<li>그래프 내에서 어떤 두 V를 잡더라도 경로가 존재해야 connected하다고 함</li>
</ul>
</li>
<li>cycle<ul>
<li>시작과 끝 V가 같은 경로</li>
<li>acyclic -&gt; 사이클이 없는 것</li>
<li>tree구조는 acyclic하면서 connected함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/505b1167-b3b1-4c92-ae00-8b17e4390447/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>분할<ul>
<li>그래프가 connected하지 않으면 여러개의 서브 그래프로 분할 할 수 있음</li>
<li>분할할때는 서브그래프가 최대로 connected하게 해야함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/832a9b9f-4fc5-430e-baf4-a77aa32ba184/image.png" alt=""></li>
<li>이건 3개로 분할가능</li>
</ul>
</li>
<li>weight<ul>
<li>엣지에 가중치를 부여 가능</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="그래프의-저장">그래프의 저장</h4>
<ul>
<li>그래프의 관계를 저장하는 방법</li>
<li>undirected 그래프는 대칭적인 매트릭스로 표현됨<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/7d3c1383-e955-4e3a-8a21-e7d9719b3d19/image.png" alt=""></li>
</ul>
</li>
<li>linked list로도 가능<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a9563403-488c-4077-8863-da944b5668e4/image.png" alt=""></li>
<li>계속 연결시키는건 아니고 </li>
<li>연결된 노드를 다 연결시킨 것</li>
</ul>
</li>
<li>Weighted Diagram<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/82797915-10e6-47ef-9ad5-12d0e8f22501/image.png" alt=""></li>
<li>linked list에 필드 1개를 추가<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ad44a16c-fda1-46a4-8555-65f69d6f19d6/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="dfs-bfs">DFS, BFS</h3>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f9c1e953-809a-4d00-b411-8e890afd5016/image.png" alt=""></li>
<li>bfs는 큐를 사용(iterative)</li>
<li>dfs는 스택(iterative), 재귀 둘다 가능<ul>
<li>ABFEIGCH는 스택사용의 결과</li>
</ul>
</li>
<li>DFS로 tree를 만들 수 있음<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/81c9e2d6-848c-41ef-83c9-bd7388c87d2b/image.png" alt=""></li>
<li>만약 undirected그래프면 cross, descendant엣지가 없음</li>
</ul>
</li>
</ul>
<hr>
<h4 id="biconnected-component">Biconnected component</h4>
<ul>
<li>articulation point : 제거하면 connected하지 않게 되는 지점</li>
<li>바이커넥티드는 articulation point가 없는 그래프</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/261d47ca-0bf4-4f39-85da-8def573f8f1b/image.png" alt=""></li>
<li>a에서 articulation point는 f,e,b임</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 과학 - 10(KNN)]]></title>
            <link>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-10KNN</link>
            <guid>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-10KNN</guid>
            <pubDate>Mon, 20 Nov 2023 02:24:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="k-nearest-neighbors">K Nearest Neighbors</h2>
</blockquote>
<ul>
<li>kNN : 가장 가까운 k개의 점<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/be2465b1-adad-4ee7-aee6-0ae5e9171528/image.png" alt=""></li>
</ul>
</li>
<li>가까운 점의 특성을 알고있을때 이를 활용해 새로운 점의 특성을 파악하는 방법임<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a2e1f3ef-9639-4007-9731-a32b89edcc77/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>특징<ul>
<li>데이터 기반 분석</li>
<li>데이터 분포를 가정하지 않음<ul>
<li>데이터가 가까이 있으면 비슷할 것이다라고만 가정함</li>
</ul>
</li>
<li>회귀문제, 분류문제등에 적용 가능<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bda96d3b-1c2d-41fb-87b1-1fbc91ba6a84/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2dccc65e-90b5-4358-87dc-c05b8fcd112f/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>1등이 여러개일 경우<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5e83b35a-4506-4188-abf0-b64106b802de/image.png" alt=""></li>
</ul>
</li>
<li>데이터가 균일하지 않으면<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/cd48c3c0-babf-40c6-9cd9-2349c4b8956a/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>적절한 k값 찾기<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a63a1cd1-6e22-4ff5-97fc-e9b8c8c5edbc/image.png" alt=""></li>
<li>k를 1부터 증가시켜가면서 가장 오류가 적은 k값 선택</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>거리(가까운 점에서 사용할 거리는 어떻게 구하는지)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e9f5e477-9fe6-4edc-9925-14ca2f0204ae/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>장,단점<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a93c6949-9ed0-416a-a0b4-d243409c04a7/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>인덱싱<ul>
<li>먼저 그룹을 지어놓고 가까운 점을 그룹내에서만 찾는 것</li>
</ul>
</li>
<li>KD-Tree<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2f2a29a2-ccaa-4597-ab37-7833d35a0ca9/image.png" alt=""></li>
</ul>
</li>
<li>VP-Tree<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bf511bab-f396-4309-8dba-af2356330e0e/image.png" alt=""></li>
</ul>
</li>
<li>KNN-Graph<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/96a3f236-6f57-4589-a0e5-fbfc9a00e54d/image.png" alt=""></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘 - 8(Union-Find)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-8Union-Find</link>
            <guid>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-8Union-Find</guid>
            <pubDate>Thu, 16 Nov 2023 05:45:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="union-find">Union-Find</h2>
</blockquote>
<ul>
<li>자료구조중 하나</li>
</ul>
<hr>
<ul>
<li>n개의 set를 가지고있음<ul>
<li>각각은공집합이 없음</li>
</ul>
</li>
<li>초기에는 set이 모두 원소가 1개인 집합임</li>
<li>union과 find연산을 제공</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5f9308d0-e72f-4d48-ab22-5cd6b00009d9/image.png" alt=""></li>
<li>각 set에서는 parent로가는 방향만 존재함<ul>
<li>root에서는 자기자신에게 감</li>
<li>root가 각 set의 대표이고 각 set은 트리로 표현</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c9a41551-3882-4309-8976-da7a374e5866/image.png" alt=""></li>
<li>위 트리를 배열로 표현할떄 각 노드는 자신의 parent인덱스를 가지고 있으면 됨</li>
</ul>
<hr>
<ul>
<li>기능<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/674a4598-7f08-4a16-8c65-33eeebbe4bbd/image.png" alt=""></li>
</ul>
</li>
<li>find -&gt; 노드의 루트찾기<ul>
<li>same_set -&gt; 루트가 같아야 같은 set</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c7d6a7e8-ccac-46ba-ab50-fe66e08848aa/image.png" alt=""></li>
</ul>
</li>
<li>union -&gt; union(1,2)이면 1의 루트를 2의 루트로 바꾸는 것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/84663ef7-89b5-4436-92dc-b8d93d4a10e7/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/36c0cfa9-6dcd-4ca0-be85-78091429c983/image.png" alt=""></li>
<li>n개의 싱글톤 셋 만들기</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/60dc5cd6-3e1b-4d50-89e0-93bbb49adea1/image.png" alt=""></li>
</ul>
<hr>
<ul>
<li>union과정에서 트리의 높이가 계속 높아지는 문제가 생길 수 있음(이러면 find에 시간이 오래걸림)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/469cf7af-2297-4332-a8b2-9b3e69cbfedc/image.png" alt=""></li>
</ul>
</li>
<li>이때 키가 작은 트리가 높은 트리에 붙게 해주면서 해결(개선1)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c3be8061-d64b-4972-b26d-26ea0c1f7e26/image.png" alt=""></li>
<li>size를 추가해서 코딩<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b6a5f3b9-469b-4caf-b2f1-6192ff32aef4/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>worst<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/32d21b4c-ce1b-45df-8e18-ac18d122cd18/image.png" alt=""></li>
<li>노드의 개수가 2배 늘어날떄마다 높이가 1증가(logn)</li>
</ul>
</li>
<li>연산시간 종합<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/884ebc7d-9ad9-4d06-b8e8-89900b14cc07/image.png" alt=""></li>
</ul>
</li>
<li>처음 루트를 찾았을때 parent를 루트로 변경시키는 방법으로 find의 연산시간을 줄일 수 있음(개선2), Path Compression<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1794717c-aa7d-4ccf-b4d8-1d372abf4563/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f594cffc-3d36-41fb-b6a0-3d3c8f5c480b/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/292a6532-3e54-461d-a371-98a07be6dedc/image.png" alt=""></li>
</ul>
</li>
<li>Path Compression2<ul>
<li>parents를 grand parents로 만들어주는 과정의 반복으로 할 수도 있음(한번 할때마다 반씩 줄어듬)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c57b2767-f3f4-4cec-8172-c47b4197eb2f/image.png" alt=""></li>
</ul>
</li>
<li>log*n : 로그를 몇번 취해야 1보다 작아지는지<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a0d5197e-c0bd-44cf-8015-8e478a5c1a74/image.png" alt=""></li>
</ul>
</li>
<li>최종 정리<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6723f36d-f3e4-4ce6-90e5-4ce2be74ce0e/image.png" alt=""></li>
<li>m번의 union/find를 할때의 시간</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘 - 7(Greedy Approach 1,2)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-7Greedy-Approach</link>
            <guid>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-7Greedy-Approach</guid>
            <pubDate>Thu, 16 Nov 2023 05:32:57 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="greedy-approach">Greedy Approach</h2>
</blockquote>
<ul>
<li>일반적으로 여러개의 원소 집합에서 부분집합이 해답일때 부분집합을 구할때 사용함</li>
<li>해답을 집합 g라할때 처음엔 공집합, 주어진 원소에서 g에 포함될 원소를 차례로 1개씩 선택<ul>
<li>원소 선택과정에서 전후 관계를 고려하지 않음</li>
</ul>
</li>
</ul>
<hr>
<h4 id="동전교환">동전교환</h4>
<ul>
<li>1,5,10,50,100으로 378원을 교환해주기</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/74af087f-37fc-4fea-a042-6708b48f163e/image.png" alt=""></li>
<li>동전교환에서는 값이 큰 동전부터 선택</li>
<li>문제점<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b1086b13-e16f-4a39-be0f-2e8c3371d4c0/image.png" alt=""></li>
<li>일반적인 경우는 DP로 품</li>
</ul>
</li>
</ul>
<hr>
<h4 id="가방-채우기">가방 채우기</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2046d77b-6532-45a8-a3be-770fcdff86af/image.png" alt=""></li>
<li>단위 부피당 가격이 높은 치즈부터 채움</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/aea50c1f-3a18-4c7b-b30c-40ae18698833/image.png" alt=""></li>
</ul>
<hr>
<ul>
<li>치즈를 자를 수 없는 경우는?</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/095a875e-d63f-44b2-8650-44295b8b940b/image.png" alt=""></li>
<li>이 경우에는 DP로 풀어야 함</li>
</ul>
<hr>
<h4 id="회의실-배정-문제">회의실 배정 문제</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e88b2743-29a2-427f-b487-3104c1e3f17c/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e80094be-a07b-4a88-9cdd-e1a0382f324d/image.png" alt=""></li>
<li>가장 빨리 끝나는 회의부터 선택</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/97d47be0-6378-402c-a9b8-a1cca45fb8c0/image.png" alt=""></li>
<li>이때 그 다음 회의를 고를때는 시작시간이 이전 회의의 종료시간보다는 커야함</li>
</ul>
<hr>
<h4 id="minimum-spanning-trees">Minimum Spanning Trees</h4>
<ul>
<li>모든 V를 포함하면서 connected인 트리</li>
<li>그중 웨이트의 합이 가장 작은것을 구하는 것임</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9ee9aae8-bf14-4894-b777-2c91541f7d5f/image.png" alt=""></li>
<li>1,2는 사이클이 있기 떄문에 트리가 아님</li>
<li>3,4둘다 spanning tree인데 웨이트가 더 작은 4가 minimum spanning tree</li>
<li>Prim, Kruskal 2개의 알고리즘이 있음</li>
</ul>
<hr>
<h4 id="kruskals-algorithm">Kruskal`s algorithm</h4>
<p>MST를 찾는것</p>
<ul>
<li>웨이트가 작은 엣지순서로 정렬<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9b51e072-5b88-4c64-9e4c-da4bd684c72d/image.png" alt=""></li>
<li>웨이트가 작은 엣지부터 추가함</li>
<li>엣지를 추가해서 사이클이 생기면 추가 안함</li>
<li>v가 5개면 엣지 4개를 구하면 종료임</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/352841ed-91ca-4084-a5b8-fc76853d9115/image.png" alt=""></li>
<li>엣지를 추가할때마다 사이클이 만들어지는데 검사하는게 중요<ul>
<li>이걸 유니온 파인드로 검사함</li>
<li>새로 추가할 엣지에 연결될 P와Q가 유니온 파인드의 같은 트리에 속하면 사이클이 생김, 다를떄만 엣지를 추가하고 UF에서 merge함</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="prims-algorithm">Prim`s Algorithm</h4>
<ul>
<li>한 버텍스에서 시작(크루스칼)은 엣지를 추가하는 방식</li>
<li>전체 버텍스를 y라함</li>
<li>V를 하나 고르고 V와 y-v를 잇는 엣지 중 가장 웨이트가 작은 엣지를 고르고 이은 버텍스를 V에 추가</li>
<li>위 과정을 반복<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d2fc34d9-be70-4667-8a1d-3cf0bc2c2639/image.png" alt=""></li>
</ul>
</li>
<li>엣지를 선택할때 최소값만 사용하기 때문에 각각의 V는 자신과 이어준 엣지중 가장 웨이트가 작은 엣지만 관리하면 됨</li>
<li>V를 추가하면서 V에 연결된 노드도 갱신 연결된 노드는 nearest, 거리를 distance로 관리함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6750e3be-7dde-4382-a4a6-40a740ec9230/image.png" alt=""></li>
<li>여기서 거리가 무한대여도 제일 가까운 노드를 1로 초기화 하는게 중요</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c9389f39-1db2-4d8f-9237-5583771d5f6f/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/eb24d34b-c7d3-42f5-832a-7d6a20f14450/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="dijkstras-algorithm">Dijkstra`s Algorithm</h4>
<ul>
<li>가장 짧은거 고르고, 추가된 곳을 경유해서 가는게 더 빠르면 그 값으로 갱신, 가장 짧은거 고르기 반복</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/919fa348-d761-427f-bdd8-f26a6f9a5f24/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a240aae8-9cb9-4843-87ef-0e4ec6ee68d7/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/312b872b-3ecd-48cc-aa0b-ebbd55d50d93/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 비전 - 14(CNN)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-14CNN</link>
            <guid>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-14CNN</guid>
            <pubDate>Mon, 13 Nov 2023 05:44:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="cnnconvlutional-neural-networks">CNN(Convlutional Neural Networks)</h2>
</blockquote>
<ul>
<li>이전까지는 이미지를 1차원으로 펴서 연산을 했었음<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b0c850aa-a8eb-478f-9e7c-f933cd6a282c/image.png" alt=""></li>
<li>이미지가 32x32x3이면 1차원으로 펴면 3072x1이 됨</li>
<li>이때 w도 3072에 맞게 3072xn의 크기로 커짐<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5cf212a7-76d9-4b1e-9e33-c93703514c32/image.png" alt=""></li>
</ul>
</li>
<li>연산횟수도 많고 인풋 아웃풋의 모양도 바뀌게 됨</li>
<li>연산횟수 감소와 모양 유지를 위해 컨볼루션을 도입</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2cf5bea3-9841-4234-89fc-fddd4a5170fe/image.png" alt=""></li>
<li>뎁스에 맞게 필터도 뎁스를 가짐 <ul>
<li>컨볼루션 연산 과정은 동일함(3x5x5면 총 75개를 더함)</li>
<li>bias도 도입해서 원점을 안 지나게</li>
</ul>
</li>
<li>결국 필터 하나를 씌우면 아웃풋의 뎁스는 1임<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/197bc4a3-2f3c-4fb3-a406-96d74337d6ac/image.png" alt=""></li>
</ul>
</li>
<li>아웃풋의 뎁스(채널)의 수와 필터의 수가 동일해지는 것이고 인풋의 뎁스는 필터의 뎁스와만 동일하며 인풋과 아웃풋의 뎁스는 연관이 없음<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/240b9dc3-5cbb-40d2-8dcf-0ab3b4bb7e24/image.png" alt=""></li>
<li>필터쪽에서 사용하는 4차원은 필터의 개수, 인풋과 필터의 뎁스, 필터의 크기가 됨</li>
<li>bias도 필터 개수만큼 필요</li>
<li>아웃풋은 인풋에서 필터의 크기를 뺀 크기로 필터의 개수만큼 나옴 -&gt; 6x28x28</li>
</ul>
</li>
<li>Batch : 이미지의 개수<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a998cf28-02b1-42ef-aadc-b823d7ba925b/image.png" alt=""></li>
<li>위의 숫자들을 일반화하면<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3e096090-beef-4a24-b0a8-01702c2c612b/image.png" alt=""></li>
<li>최종적으로는 4차원이 필요</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>위의 과정이 CNN의 1간계의 레이어이고 일반적으로 여기서도 여러 레이어를 거치게 됨<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8d744610-a89e-4dd1-91b8-82ff24c2c89f/image.png" alt=""></li>
<li>N은 유지되고 중간중간 필터의 개수가 바뀜에 따라 아웃풋의 개수도 바뀜</li>
</ul>
</li>
<li>추가로 컨볼루션도 리니어 연산이기 때문에 컨볼루션 연산 후 non리니어 연산훌 추가해 선형성을 제거해줌<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/009846af-6cae-4a32-b857-86dd500747da/image.png" alt=""></li>
</ul>
</li>
<li>실제로 딥러닝을 거쳐 나온 필터 예시<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/90eb34ed-aa6d-4152-b4a9-c0fff3129a25/image.png" alt=""></li>
</ul>
</li>
<li>필터를 거치고나면 가로세로의 크기가 줄어듬<ul>
<li>패딩으로 사이즈를 유지</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d6ca8045-fc99-495a-a052-e1d3ebe2d3f2/image.png" alt=""></li>
<li>위를 제로패딩이라 부르고 패딩의 종류는 여러개가 있을 수 있음</li>
<li>인풋, 필터, 패딩의 사이즈에 따른 아웃풋의 크기<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/797ce94e-d9e7-41d4-979f-db951108fe94/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>Receptive Fields<ul>
<li>어느 크기의 픽셀에 의존하여 아웃풋이 나왔는지<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/08e02a1e-6813-463f-8c95-622a3c773e9b/image.png" alt=""></li>
<li>아웃풋 한 픽셀의 Receptive Field는 9(3x3)</li>
</ul>
</li>
<li>레이어가 여러개일때 (previous, input)에 대한 receptive field의 크기가 달라 질 수 있음<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f1849073-c059-4040-a4ad-1317999b9aed/image.png" alt=""></li>
<li>input에대한 RF는?<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b40183eb-f806-4acb-b89e-08291f75d1a6/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>Receptive Field의 의미는 이전에 있는 이미지를 커버해주는 범위(높으면 좋은것)<ul>
<li>레이어를 많이 쌓거나</li>
<li>이미지의 크기를 줄이면 높일 수 있음<ul>
<li>필터를 한번에 1픽셀이 아닌 더 큰 숫자만큼 이동시키면 가능(Strided convolution)</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>최종적인 아웃풋의 이미지 사이즈<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3ead762b-e6c5-4dd3-83b6-46ed03a69674/image.png" alt=""></li>
</ul>
</li>
<li>아웃풋의 이미지 예제<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2d64b316-363a-474b-87d3-89457b2b7a62/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/34ea0aa0-77f8-4d23-8b41-c34ac7605a5e/image.png" alt=""></li>
<li>학습 가능한 parameter의 개수<ul>
<li>(필터의 크기 + bias) * 필터의 개수</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3d86644d-be4c-4eb5-ad37-944d640c36eb/image.png" alt=""></li>
</ul>
</li>
<li>총 연산의 개수<ul>
<li>총 필터를 사용한 횟수 x 필터의 크기(한번 할때 필터의 크기만큼 곱하기를함)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b5643e28-027e-4b14-8184-02011b997031/image.png" alt=""></li>
<li>필터를 사용한 횟수와 아웃풋의 사이즈는 동일함</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="pooling-and-batch-normalization">Pooling and batch normalization</h3>
<ul>
<li>1x1 convolution : feature를 뎁스1로 합치는 역할</li>
<li>필터의 개수에 맞게 학습시키면서 크기를 줄여줌<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a1a7f7d9-24df-4d07-9f51-66097caef8eb/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="pooling이미지의-크기를-줄이는-것">Pooling(이미지의 크기를 줄이는 것)</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f5b0aa4f-3c64-47f2-9017-7d9f15a3a7c5/image.png" alt=""></li>
<li>Max Pooling(max값을 사용해 pooling)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/471e91c2-b104-4c87-af29-c3972b0910cd/image.png" alt=""></li>
<li>pooling은 학습은 아님, max에서는 가장 큰 값이 살아나게 되는데 이미지의 모양이 유지되는 효과</li>
<li>stride가 2인 필터를 돌려도 이미지 크기는 똑같지만 이는 이미지의 모양은 변함(안좋은건 아니고 상황에 맞게 쓰기)</li>
</ul>
</li>
</ul>
<hr>
<h3 id="cnn의-과정">CNN의 과정</h3>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9f1af8ff-57ff-4aa0-9290-84a92484dc28/image.png" alt=""></li>
<li>Convolution을 여러번 거치고 1x1의 형태로 펼쳐줘야함(Flatten)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5689c51b-0842-40f3-849e-cefea2604130/image.png" alt=""></li>
<li>마지막은 softmax로 클래스에대한 확률값으로 반환해줌(최종 output size가 10인이유 : 클래스의 개수)</li>
<li>추가로 위의 과정에서 convolution을 거칠때마다 값의 범위가 늘어나게됨<ul>
<li>정규화가 필요</li>
</ul>
</li>
</ul>
<hr>
<h4 id="정규화">정규화</h4>
<ul>
<li><p>Batch Normalization</p>
<ul>
<li><p>정규화에 학습의 여지를 추가해준 것</p>
</li>
<li><p><img src="https://velog.velcdn.com/images/3eung_h10n/post/b974f85d-718d-4954-a854-8b8ae964685a/image.png" alt=""></p>
</li>
<li><p>NxD에서(D는 데이터의 크기,차원 N은 데이터의 개수)</p>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/92691769-8d19-4760-86b8-31081d510d73/image.png" alt=""></li>
</ul>
</li>
<li><p>데이터의 내부에서가 아니라 같은 차원에서의 mean을 구함</p>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/4b868217-8487-4180-8182-460d11214f6d/image.png" alt=""></li>
<li>각 feature의 의미를 구하는 것이 결과를 도출하는데 도움이 되기 때문에 같은 차원에서의 평균을 구하는 것</li>
</ul>
</li>
<li><p>이미지에서의 Batch Normalization</p>
<ul>
<li>한면을 평균내서 위와 동일하게함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6b49f295-a9f4-4155-8b96-2dd06f879bfc/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li><p>Layer Normalization</p>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/69efc5f0-2abf-4431-9124-515e18e7bf6d/image.png" alt=""></li>
<li>자연어처리등 데이터의 양이 매우커 batch정규화를 사용하기 어렵고 차원마다 의미하는게 다르지 않을때 사용</li>
<li>데이터마다의 평균을 구함</li>
</ul>
</li>
<li><p>Instance Normalization</p>
<ul>
<li>가로세로로만 평균을 냄(평균내면 크기가 1)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/41100fc4-ed73-42e7-a44e-35bf317e19d5/image.png" alt=""></li>
</ul>
</li>
<li><p>Norm 정리</p>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/31b37d72-3f2d-4486-9551-3f64f2bcb6f7/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 과학 - 9(Clustering)]]></title>
            <link>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-9Clustering</link>
            <guid>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-9Clustering</guid>
            <pubDate>Mon, 13 Nov 2023 02:09:03 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="clustering">Clustering</h2>
</blockquote>
<h4 id="비지도-학습중-하나">비지도 학습중 하나</h4>
<ul>
<li>기계 학습(비지도 학습)중 하나임<ul>
<li>데이터가 어떻게 구성되었는지 알아내는 문제</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/fd4e9a41-6f3d-446c-99fe-31c7532d9225/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="다차원-공간에서-여러개의-점들-중-서로-가까이-있는-점들을-서로-연관시키는-문제">다차원 공간에서 여러개의 점들 중 서로 가까이 있는 점들을 서로 연관시키는 문제</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/35fea44f-7e1d-4580-aef4-b06c892d8dba/image.png" alt=""></li>
<li>인물 사진 분류(사진 중 닮은 사진 모으기)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/df6b2730-10b1-4d09-ae88-61f8baade093/image.png" alt=""></li>
</ul>
</li>
<li>활용 예시<ul>
<li>비슷한 뉴스 모으기</li>
<li>스팸메일 분류</li>
<li>비슷한 성향의 사용자/영화 모으기</li>
<li>사진 압축<ul>
<li>원본 이미지의 색 가지수를 줄일떄 비슷한 색끼리 묶는 것</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="k-means-clustering">K-Means Clustering</h3>
<ul>
<li>반복적인 연산을 통해 데이터를 k개의 클러스터로 분할하는 알고리즘<ul>
<li>클러스터 분석 알고리즘</li>
<li>분할법(어떤 노드가 클러스터에 중복되게 포함하지 않도록 하는 것)</li>
<li>클러스터 개수 k는 사용자가 지정해야함</li>
<li>반복연산 사용</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>임의로 k개의 중심점을 생성<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e59b6f72-83ca-4320-af84-88222ed11ad7/image.png" alt=""></li>
</ul>
</li>
<li>각각의 점을 가장 가까운 중심점의 클러스터에 포함 시킴<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ca6363be-99a8-47c8-8fd5-9df00130fc36/image.png" alt=""></li>
</ul>
</li>
<li>각 클러스터에 포함된 점들을 평균내어 새로운 중심점을 계산<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/129a746e-a64e-48cb-be2d-41a3d4c80d7b/image.png" alt=""></li>
</ul>
</li>
<li>그 후 다시 2번,3번을 반복<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1c3d5187-4096-4eb2-a795-bbb044a91322/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/70e7dca3-89ee-419a-955d-ff55ecf4ffed/image.png" alt=""></li>
</ul>
</li>
<li>클러스터 변화가 없으면 종료<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/474ec774-e924-4135-8d04-c156b87d5d7a/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="local-optimum">Local Optimum</h4>
<ul>
<li>초기화된 중심점에 의존하는 것<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/85bf1935-288a-4c8d-8418-af2f81b0f340/image.png" alt=""></li>
<li>좋지 않은 결과가 나옴</li>
</ul>
</li>
</ul>
<hr>
<h4 id="중심점-초기화local-optimum을-피하기-위해">중심점 초기화(Local Optimum을 피하기 위해)</h4>
<ul>
<li>중심점을 랜덤으로 여러번 시행<ul>
<li>비어있는 클러스터가 생길 수 있음</li>
</ul>
</li>
<li>데이터 점 들 중 임의로 중심섬을 선택<ul>
<li>비어있는 클러스터가 생기지 않음</li>
</ul>
</li>
<li>직접 중심점을 지정할 수도 있음<ul>
<li>데이터를 얼추 알고 있을 때 사용 가능</li>
</ul>
</li>
<li>K-Means++<ul>
<li>서로 가장 멀리 떨어진 점들을 중심점으로 사용<ul>
<li>임의의 점 1개 지정</li>
<li>점에서 가장 멀리 떨어진 점을 중심점 1번으로 사용</li>
<li>중심점 1에서 가장 멀리 떨어진 점이 중심점 2</li>
<li>중심점 1,2둘에서 가장 멀리 떨어진 점이 중심점 3</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="k-값-선택">K 값 선택</h4>
<ul>
<li>클러스터의 분산의 합이 낮으면 좋은 것<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/c95c43dc-b3d3-4cc1-b5c1-df0d7c3fe61e/image.png" alt=""></li>
</ul>
</li>
<li>k의 값을 1부터 증가시켜가면서 비용(분산)을 분석<ul>
<li>비용의 감소가 급격히 줄어드는 지점을 선택</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1c2aa0f5-c1d8-4079-9de6-75f307fd5a2b/image.png" alt=""></li>
<li>저 지점에서 k를 더 늘리면 비슷한 데이터에서 클러스트가 여러개 생길 수 있음</li>
</ul>
</li>
</ul>
<hr>
<h4 id="다른-클러스터링-방법">다른 클러스터링 방법</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f0de950f-cfb2-4127-b5d1-a18c46b6fe57/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘 - 6(Computational Complexity)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-6Computational-Complexity</link>
            <guid>https://velog.io/@3eung_h10n/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-6Computational-Complexity</guid>
            <pubDate>Thu, 09 Nov 2023 05:45:53 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="computational-complexity">Computational Complexity</h2>
</blockquote>
<hr>
<ul>
<li>문제 자체를 분석하는 분야<ul>
<li>문제가 컴퓨터로 해결 가능한가?</li>
<li>문제의 lower bound가 몇인지</li>
</ul>
</li>
<li>lower bound : 문제 해결의 최고 효율(더 좋아질 수 없음)</li>
</ul>
<hr>
<h3 id="heapsort">Heapsort</h3>
<ul>
<li>Priority Queue사용<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6831fad5-34dd-4b32-8ac2-a54ec1fabfef/image.png" alt=""></li>
</ul>
</li>
<li>Binary Tree를 사용함<ul>
<li>Complete Binary Tree<ul>
<li>제일 밑 레벨을 제외한 레벨에서는 모든 노드가 차있고(리프 2개) 제일 밑 레벨은 맨 뒤에서부터만 연속적으로 없어도 되는 구조</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/00da1da8-a047-41b7-90fe-06126f13bd38/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>BST는 1차원 배열로 표현 가능<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/38cc23d8-aca2-4944-8ead-ee033378fb2c/image.png" alt=""></li>
<li>왼쪽 리프인덱스는 x2, 오른쪽은 x2+1(루트 인덱스가 1일떄)</li>
<li>리프에서 부모노드의 인덱스는 2로 나누고 버리면 됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f0b2e76c-c315-4b6f-9161-03c853b3d471/image.png" alt=""></li>
</ul>
</li>
<li>특성<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6455b560-b2dc-4fd1-bbac-30cdf10835f0/image.png" alt=""></li>
<li>한 레벨의 노드의 개수는 2^L개</li>
<li>Height는 max level</li>
<li>full binary tree에서 노드의 개수는 2^h + 1</li>
<li>complete binary tree에서는<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/baba5821-a8f7-4589-add0-04e574f42582/image.png" alt=""></li>
</ul>
</li>
<li>n개의 노드가 있는 complete binary tree의 H는<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/14b6bdc3-6ea2-496f-a2b1-52573d4c621f/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>parent가 크면 Max Heap 작으면 Min Heap(이 둘중 하나를 만족해야 Heap임)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9739baef-a15e-4b0d-90cf-75df6664b180/image.png" alt=""></li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2e45de86-ce1d-46f3-9397-69df4620d2bd/image.png" alt=""></li>
<li>왼쪽만 Heap(둘다 complete tree이긴함)</li>
</ul>
<hr>
<ul>
<li>Insert<ul>
<li>일단 트리의 특성을 유지하기 위해 제일 밑에 추가함</li>
<li>그 후에 추가한 노드를 Heap의 특성을 유지하기 위한 알맞은 위치로 옮겨줌</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f0bc6577-8e07-497c-9b46-8a4f87648a46/image.png" alt=""></li>
</ul>
</li>
<li>Delete<ul>
<li>먼저 삭제하고 싶은 노드를 삭제함(min, max인 루트 노드만 삭제 가능)</li>
<li>제일 밑의 오른쪽을 삭제한 위치(루트)로 옮김(complete binary 트리의 성질을 유지하기 위해 제일 밑의 오른쪽이 비워질 수 밖에 없음)</li>
<li>그 후 루트부터 Heap의 특성을 유지하기 위한 위치로 이동함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/76e89c02-cb9d-4b93-8ae1-9b5a5e5ecd8a/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/cbc3d279-8578-4cf2-8201-a611ecb89ff5/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>Heap Construction</li>
<li>삭제후 루트에서 제 위치로 이동하는 과정에서 비교연산이 몇번 일어나는지</li>
<li>한번 이동할때 2번비교함(리프 중 더 큰/작은 리프를 찾는데 1번, 루트와 비교하는데 1번)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/cf433343-94f3-448b-b9fd-98a93997828a/image.png" alt=""></li>
</ul>
</li>
<li>위의 기능으로 Heap을 divide and conquer로 만들 수 있음<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2625912b-504b-4fc4-9139-f273cbad576c/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="반복문으로-힙-construction하기">반복문으로 힙 construction하기</h4>
<ul>
<li>리프의 바로 위부터 시작<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e6eb4424-ae59-4246-8c92-724f36d5b323/image.png" alt=""></li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/fa74166d-7c2a-4c4c-bd13-e9969e25ab7f/image.png" alt=""></li>
</ul>
<hr>
<h3 id="heap-sorting">Heap Sorting</h3>
<ul>
<li>가장 간단한 방법<ul>
<li>n개의 데이터를 힙에 넣고</li>
<li>delete min/max를 n번하면 정렬</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5f8a5b31-3388-45dd-8425-0253094bf55e/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>delete하면서 정렬할때 배열이 1개 더 필요할거 같지만 1개만 있어도 가능함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/aaf617e5-04a7-4854-9f81-949c3e84b18f/image.png" alt=""></li>
<li>max를 지우고 36을 root로 올린다음 fix할때 max(97)을 36자리에 주면 됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/77ff9d88-1ee1-41d0-aaef-508e23a60086/image.png" alt=""></li>
<li>한번할때마다 마지막 자리가 비게 되고 그 자리에 정렬된 원소를 채우는 방식</li>
<li>max힙일때 최대값이 제일 뒤로감, min힙은 최소값</li>
</ul>
</li>
</ul>
<hr>
<h3 id="radix-sort">Radix Sort</h3>
<ul>
<li>비교없이 정렬하는 방법</li>
<li>일정 범위를 설정하고 데이터들을 해당하는 범위로 지정하는 과정을 반복</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5b77a1be-d810-4b3d-ab30-d74e1571a981/image.png" alt=""></li>
<li>위는 100단위, 10단위 1단위 순서로 정렬한것</li>
<li>작은 단위부터 정렬하는 방법도 있음</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8c939406-cbf5-4993-a6e4-ea7cb6c9e913/image.png" alt=""></li>
<li>1단위로 정렬한 후 10단위로갈때 순서대로 옮기는것이 중요함</li>
<li>O(n)만에 정렬가능, 비교를 하지 않고 정렬하기 때문에 LowerBound를 적용받지는 않음(적용받을 경우 nlogn이 제일 빠른 경우임)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 비전 - 13(vector_backprop)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-13vectorbackprop</link>
            <guid>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-13vectorbackprop</guid>
            <pubDate>Wed, 08 Nov 2023 05:48:13 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="vector_backprop">vector_backprop</h2>
</blockquote>
<ul>
<li>스칼라끼리의 관계가 있고 백터와 스칼라의 관계는 Gradient, 벡터와 벡터간의 관계를 jacobian이라 함</li>
</ul>
<hr>
<h3 id="jacobian">Jacobian</h3>
<ul>
<li>벡터와 벡터간의 관계를 정의</li>
<li>위쪽의 1x2의 벡터에서 2개의 행에 각각 x,y가 관여하는 점을 정리 <ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d1029909-c273-41e3-8e08-19bdfaec25ce/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/e01f17d9-5129-4acb-b3ba-250aa62eeb37/image.png" alt=""></li>
<li>f에서 z는 결국 x와 y의 연산의 결과, Backpropagation은 x,y가 그 단계에서 z에 각각 얼마나 영향을 주었는지 구하는 것</li>
<li>upstream에서 주어진 그레디언트를 가지고 자코비안으로 local 그레디언트를 구해서</li>
<li>downstream으로 체인룰을 거쳐 흘려보내줌</li>
<li>이때 차원도 x,y,z에 맞게 나옴</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/52fcec67-c68b-4512-bade-5ac06d6095c0/image.png" alt=""></li>
<li>upstream의 미분값은 주어지고 <ul>
<li>local 자코비안은 upstream에대한 인풋에 미분<ul>
<li>1보다 크면 1 작으면 0</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/81b614a8-52d4-4b47-88af-6d8b2e51fc96/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>자코비안 행렬에 업스트림에서 주어진 그레디언트를 곱해서 다운스트림으로 흘려주는 것<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/cc395f03-f5be-4480-a416-1a1c0826759c/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="행렬의-연산">행렬의 연산</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/064de2f9-55e3-4694-81c8-d232ab0e19dc/image.png" alt=""></li>
<li>데이터가 N개 들어왔을떄의 경우<ul>
<li>결국 행렬의 크기에서 다운스트림과 인풋의 크기가 같아야하고 업스트림과 아웃풋의 크기가 같아야함</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/65e00d3a-72f3-409e-a707-872a6c09956c/image.png" alt=""></li>
<li>하지만 위의 경우는 연산횟수가 너무 많음(저장공간도 많이 사용)<ul>
<li>그래서 중간에 자코비안을 거치지 않고 바로 다운스트림을 구하는 룰을 찾을것</li>
</ul>
</li>
</ul>
</li>
<li>그래서 다운 스트림(dL/dx)의 [1][1]을 구하려면?<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3f1db3cf-21d0-4925-a8d1-89071c337768/image.png" alt=""></li>
<li>인풋(dx)의 [1][1]만 사용</li>
<li>먼저 dy/dx[1][1]을 구함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8707cd9c-3d4d-4ce7-9bd9-e5d889a48da1/image.png" alt=""></li>
<li>dy/dx[1][1]은 결국 dx[1][1]과 연관된(dx[1][1]을 사용하는) 부분만 들어가게 됨<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/43c36c4d-2e27-4953-863d-f274dd4a28a8/image.png" alt=""></li>
<li>dw에서 dx[1][1]을 사용하는 부분만 그대로 들어가는 결과</li>
</ul>
</li>
<li>그 후 dl/dx[1][1]을 위해 위에서 구한 dy/dx[1][1]에 업스트림 dl/dy를 곱함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/18e00031-9182-42c0-b4a6-35733d70a592/image.png" alt=""></li>
<li>행렬 곱셈 아니고 같은 자리끼리 곱하는거</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bd2ef50d-fed3-4381-bf7e-bc2d49f226d1/image.png" alt=""><h4 id="일반화"><em>일반화</em></h4>
</li>
</ul>
</li>
</ul>
</li>
<li>dx[1][1]에서 인덱스가 바뀌어도 똑같이 dx[1][1]이 관여하는 값만 살아나고 나머지는 0이됨(일반화 가능)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/31c62e04-5b1d-44e9-a365-e2f201be5f48/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ff359eec-6274-4e33-86d4-a115188d1b5a/image.png" alt=""></li>
<li>행렬곱하기 위해 w와x를 트렌스포즈하고 각각 앞,뒤에 곱함</li>
</ul>
</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 비전 - 12(Backprogation)]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-12Backprogation</link>
            <guid>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-12Backprogation</guid>
            <pubDate>Mon, 06 Nov 2023 05:44:58 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="backprogation">Backprogation</h2>
</blockquote>
<ul>
<li>중간에 모델 구조가 바뀌거나 하는 일 때문에 중간 값을 알기위해선 처음부터 다시 계산해야하는 문제가 있음</li>
<li>모듈화를 통해 중간값을 알고 싶음 -&gt; Backprogation</li>
</ul>
<hr>
<h4 id="example">example</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bb82429e-a6c7-46ca-95f1-27cce0574f49/image.png" alt=""></li>
<li>위의 식에서 x,y,z가 웨이트 w일경우 결국 우리가 원하는건 x,y,z의 편미분값</li>
<li>chain Rule<ul>
<li>f에 대한 y의 미분값을 구할때 f와 y가 연결되어 있지 않아 q에대해 미분하고 q와 y를 연관지어 미분</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/90c6a843-9af6-4aeb-912b-39df7f67c28e/image.png" alt=""></li>
<li>이 방법도 레이어가 많아지거나 방법이 바뀌면 계싼 횟수가 굉장히 많아지거나 다시 계산해야함 -&gt; 모듈화필요</li>
</ul>
</li>
<li>Local Gradient : 현재 나의 상태에서 바로 미분이 가능한 것</li>
<li>Upstream Gradient : 이전에 먼저 계산한(위의 레이어)에서 보이는 변수를 사용해 나에게 흘려준 값</li>
<li>Downstream Gradient : 내가 Local, Upstream을 체인룰을 활용해 계산 후 밑의 레이어로 흘려주는 값</li>
<li>결국 흘러들어온 값에 내가 계산한 값을 곱해 밑으로 흘려주면 됨(모듈화)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ca26f284-3644-47e4-bd4f-b149c46d6951/image.png" alt=""></li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5c980ce0-46d4-413e-83e2-7280c67fe23f/image.png" alt=""></li>
</ul>
<hr>
<p>Gradient Flow</p>
<ul>
<li>덧셈 게이트는 위에서 흘러 들어온 값이 그대로 들어오고 곱셈은 반대의 값에 곱함</li>
<li>초록색이 현재 값 빨간색이 실제 흘러가는 값<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ffc08c0c-67a1-48c5-96e7-f016e12bdd6c/image.png" alt=""></li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/de4c0ee1-b6ce-4e0c-b3e2-61dd98f151fb/image.png" alt=""></li>
<li>위 과정을 모듈화 가능</li>
<li>모듈화를 해야 계산이 바뀌거나 처음 값이 바뀌는 등이 변동이 일어날때 즉시 수정이 가능<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5861174c-7e49-4eb4-89ff-e7a6d0dabfd1/image.png" alt=""></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 과학 - 8(Latent Factor Model)]]></title>
            <link>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-8Latent-Factor-Model</link>
            <guid>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-8Latent-Factor-Model</guid>
            <pubDate>Mon, 06 Nov 2023 02:22:46 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="별점-예측2">별점 예측(2)</h2>
</blockquote>
<ul>
<li>Latent Factor Model</li>
</ul>
<hr>
<h4 id="factor-model">Factor Model</h4>
<ul>
<li>사용자와 아이템을 요소(factor)들로 나타낼 수 있다고 생각<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d4265c21-683b-4cc5-b40e-696e02df4a88/image.png" alt=""></li>
<li>아이템, 유저의 구분 없이 정해진 주제로 하나의 좌표(벡터)로 표현하는 것</li>
</ul>
</li>
</ul>
<hr>
<h4 id="laent-factor-model">Laent Factor Model</h4>
<ul>
<li>아이템이나 유저를 표현할때 주제가 정해지지 않았음</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8b7a25c8-82d0-4fdd-8fc8-48334178128b/image.png" alt=""></li>
</ul>
<hr>
<h4 id="matrix-factorization">Matrix Factorization</h4>
<ul>
<li>사용자와 아이템을 같은 차원의 공간에 매핑(같은 차원의 벡터로 표현)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b245c1fc-f765-49c9-8c65-674a9afb8eb2/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f2ee44a3-caed-4855-a765-941516eff000/image.png" alt=""></li>
</ul>
</li>
<li>벡터들을 내적해서 주어진 평가 정보가 나오도록 벡터들을 학습시킴<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/b7d4e2cc-11d9-4f5d-a514-dea38e06a514/image.png" alt=""></li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bec8e2c8-f5da-4011-a27f-8fbc9e3e87fe/image.png" alt=""></li>
<li>여러개의 linear 리그레이션을 동시에 여러개 하는 것과 동일하다고 생각할 수 있음</li>
<li>이미 가지고 있는(별점이 평가되어있는)값만 사용해서 벡터를 학습하고 학습이 완료된 벡터를 사용해서 빈칸을 예측해야함</li>
</ul>
<hr>
<ul>
<li>Training, Test<ul>
<li>벡터가 잘 학습되었는지 검증하기위해</li>
<li>학습전에 Trin, Test데이터로 분류하고 train데이터로 먼저 학습한 뒤 test데이터로 검증해봄</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/736d55f3-21af-49e9-9b0c-2ddf68b6af21/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>Overfitting<ul>
<li>train데이터에 과도하게 맞추어 train을 못 맞추는 현상</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/12e33680-0bc4-4b31-8dd8-b46b9163d721/image.png" alt=""></li>
</ul>
</li>
<li>Regularization으로 해결<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/4a6872ca-9d9a-4061-85cf-b2563d6b056f/image.png" alt=""></li>
<li>벡터가 너무 큰 값을 가지지 않게 줄이는 것</li>
<li>L2 norm = 각 벡터의 제곱의 합을 구한 후 1/2제곱(루트)</li>
<li>Ln norm - n제곱의 합의 1/n제곱</li>
</ul>
</li>
<li>결과적으로 차원에서 원점에 멀리 떨어져있는 아이템이나 유저를 끌어오는 역할<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/07ba25d6-1c31-42f4-a7ae-fc8b716d7807/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="global-baseline-estimate--latent-factor-model">Global baseline Estimate + Latent Factor Model</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/24514628-6505-4008-9060-2d83d69e3ff0/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 과학 - 7(Collaborative Filtering)]]></title>
            <link>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-7Collaborative-Filtering</link>
            <guid>https://velog.io/@3eung_h10n/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-7Collaborative-Filtering</guid>
            <pubDate>Wed, 01 Nov 2023 02:26:57 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="collaborative-filtering별점-예측">Collaborative Filtering(별점 예측)</h2>
</blockquote>
<hr>
<h4 id="방법">방법</h4>
<ul>
<li>Collaborative Filtering<ul>
<li>Item-Item </li>
<li>User-User</li>
</ul>
</li>
<li>Latent Factor Model</li>
</ul>
<hr>
<h3 id="item-item-collaborative-filtering">Item-Item Collaborative Filtering</h3>
<ul>
<li>비슷한 아이템(드라마)에 별점을 몇점을 주었는지가 핵심 아이디어<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/2e01a4d8-5e3a-4b9b-8270-293d43918baa/image.png" alt=""></li>
</ul>
</li>
<li>방법 1 : 비슷한 아이템의 평균을 사용<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/740a6532-3f38-4067-b86a-53ae46aa3f15/image.png" alt=""></li>
</ul>
</li>
<li>방법 2 : 비슷한 아이템을 유사도를 사용해서 찾음 -&gt; 더 유사한 아이템에 가중치를 줘서 평균내기<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/170c7401-6d3d-4c09-9702-613d8e7df4d5/image.png" alt=""></li>
<li>0.7x0.45 + 0.4x5.0/ 0.7+0.4</li>
</ul>
</li>
<li>N이 2일때 평점 예측하기</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3ff2da3d-ec2f-44ba-8bb3-ddfe95f536db/image.png" alt=""></li>
<li>순서<ul>
<li>N이 2이기 떄문에 터널(a)와 비슷한 드라마 2개를 구함 -&gt; 시그널, 보이스</li>
<li>0.41 x 2 + 0.59 x 3 / 0.41 + 0.59 = 2.6</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/674f6f9f-b3cc-4dc8-b9e7-0d91019d837f/image.png" alt=""></li>
</ul>
</li>
<li>유사도는 이전의 코사인, 자카드 유사도등의 방법을 사용</li>
</ul>
<hr>
<h3 id="user-user-collaborative-filtering">User-User Collaborative Filtering</h3>
<ul>
<li>한 유저마다 한 백터로 생각</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a3da6f42-8642-4ceb-b936-87bc31353699/image.png" alt=""></li>
<li>a의 평점을 메겼던 B,D,G,J,L과 H와의 유사도를 검사</li>
<li>가장 유사한 사람 2명(N)을 구하고 그 사람이 a(터널)에 준 별점을 사용<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3c84dfc5-8f53-415b-880d-b4f588755a2a/image.png" alt=""></li>
</ul>
</li>
<li>이론상 Item-Item, User-User는 동일한 정확도를 가짐</li>
<li>하지만 실제로는 item, item이 더 좋은 성능을 보임<ul>
<li>user는 일관적인 평가를 안할 가능성이 높음</li>
</ul>
</li>
</ul>
<hr>
<h4 id="collaborative-fitering-장단점">Collaborative Fitering 장,단점</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a35c86a8-fc7b-4216-9035-47e6d84ee82b/image.png" alt=""></li>
</ul>
<hr>
<h3 id="hybrid-method">Hybrid Method</h3>
<ul>
<li>내용 기반 추천 방법(Content-based method)와 Collaborative Filtering을 함께사용<ul>
<li>새로운 아이템을 추천할땐<ul>
<li>줄거리, 출연진, 키워드등 item profile을 사용</li>
</ul>
</li>
<li>새로운 사용자<ul>
<li>전반적으로 인기가 좋은 item을 추천</li>
</ul>
</li>
</ul>
</li>
<li>둘 이상의 추천시스템을 구현하고 그것들을 통합<ul>
<li>ex) global baseline + collaborative filtering</li>
</ul>
</li>
</ul>
<hr>
<h3 id="global-baseline-estimate">Global Baseline Estimate</h3>
<ul>
<li>이미 높은 평점을 받은 드라마에는 나도 높은 평점을 줄것이다, 내가 깐깐한편이면 평균보다 조금 낮게 평점을 줄것이다라는 아이디어를 사용</li>
<li>ex) 원준이가 드라마 이두나를 보고 매길 평점을 예측<ul>
<li>원준이가 이두나와 비슷한 드라마를 본적이 없어 collaborative필터링을 사용 불가능</li>
</ul>
</li>
<li>global baseline estimate사용<ul>
<li>전체 드라마의 평점 평균 : 3.7(이거만 있으면 원준이도 이두나에 3.7을 줄것이다라고 예측)</li>
<li>이두나의 평점 평균 : 4.2(전체 평균보다 0.5점 높음)</li>
<li>원준이가 매긴 전체 드라마의 평점 평균 : 3.5(전체 평균보다 0.2낮음)</li>
<li>기본 점수(global baseline) : 3.7+0.5+0.2 -&gt; 4.0</li>
</ul>
</li>
</ul>
<hr>
<h4 id="global-baseline--collaborative">global baseline + collaborative</h4>
<ul>
<li>위에서 구한 기본 평점 4.0을 CF(collaborative Filltering)에 사용</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/42eff348-e94b-457d-b325-ba3b8628eaf9/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/586a383b-c0f0-41da-b2cf-18f1242b47dc/image.png" alt=""></li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 비전 - 11(DNN) ]]></title>
            <link>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-11%EB%94%A5%EB%9F%AC%EB%8B%9D</link>
            <guid>https://velog.io/@3eung_h10n/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-11%EB%94%A5%EB%9F%AC%EB%8B%9D</guid>
            <pubDate>Mon, 30 Oct 2023 05:35:56 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="딥러닝-_intro">딥러닝 _intro</h2>
</blockquote>
<hr>
<h3 id="학습">학습</h3>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/8da9b3d5-731a-4329-91fd-87071d59ccf9/image.png" alt=""></li>
<li>W의 값들을 잘 조정해서 원하는 결과가 나오게 하는 것<ul>
<li>많은 데이터를통해 w를 갱신해가는 과정이 학습임</li>
<li>b가 없으면 직선이 원점을 반드시 지나야 하기 때문에 한계가 있음</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/bd409b86-9011-40b0-b429-b375b1b2c701/image.png" alt=""></li>
<li>원점을 지나지 않는 직선은 linear하지 않다<ul>
<li>b를 더하는 대신 w에 차원을 추가하는 방식으로 linear성질을 유지할 수 있음</li>
</ul>
</li>
</ul>
<hr>
<h4 id="템플릿-매칭">템플릿 매칭</h4>
<ul>
<li>주어진 데이터(이미지)와 기존의 템플릿을 활용해 결과는 내는 방식<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/ed944c7a-8203-45bb-ac37-afd0b23e8e59/image.png" alt=""></li>
<li>템플릿과 기존의 이미지의 모양이 비슷해야 아웃풋 값이 커짐</li>
<li>위의 선형 학습은 템플릿 매칭중 하나라고 생각할 수 있음</li>
</ul>
</li>
<li>데이터의 개수가 매우 많아지면 그 모든 데이터에 매칭되는 템플릿을 찾는 과정에서 템플릿이 계속 뿌옇게 변해가기 때문에 한계가 명확함, 그래서 딥러닝을 사용<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/27c11509-28ee-4475-b816-78c7d6a8c040/image.png" alt=""></li>
<li>말(horse)템플릿의 경우 말이 양쪽을 보고 있는 것처럼 보이는데 많은 데이터를 모두 만족시키기 위해서 나온 현상임</li>
</ul>
</li>
</ul>
<hr>
<h4 id="학습의-과정">학습의 과정</h4>
<ul>
<li>w를 찾아야 함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a2bbdc1c-3c7f-4d2d-8ed8-50fb05eeb584/image.png" alt=""></li>
<li>loss function을 정의하고</li>
<li>optimization으로 이를 최적화함</li>
</ul>
</li>
<li>loss function<ul>
<li>현재의 모델이 얼마나 좋은지를 평가하는 지표</li>
<li>loss가 낮으면 좋은것(loss는 정답값과 떨어져있는 정도임)</li>
<li>loss를 최소화하게 만드는 w를 찾는것이 학습</li>
</ul>
</li>
<li>정답값은 미리 주어져야함<ul>
<li>모든 x에대한 결과값 y에대한 데이터 셋이 필요<ul>
<li>ex) 이미지 x 1번의 y y1은 1(정수로 표현)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/a046c09f-eb88-4e90-b458-33aaa523f6d2/image.png" alt=""></li>
</ul>
</li>
<li>우리 모델의 아웃풋과 정답값의 차이를 정의<ul>
<li>위에서 주어진 x에 대한 우리가 정의한 함수를 적용시켜서 나온 결과값과 위에서 주어진 같은 x에대한 정답값 y과의 차이를 구함</li>
<li>차이값은 x의 개수만큼 나오게되고 최종 loss값은 일반적으로 평균값으로 선택</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/74862cc3-f375-4e9d-96bb-2bcf5dccf41f/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>소프트맥스함수로 확률로 변환(기존값을 e의 지수로 올려서 다 더해서 분모로 보내고 각각의 값은 각각의 값을 e의지수로 올려서 분자로 보냄)<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5eba70b1-4180-461e-b65d-1b181e624be1/image.png" alt=""></li>
<li>0.13이 정답 클래스에 대한 확률값임 0.13이 1이 될때 -log함수는 0이되기때문에 loss값이 최소가 됨</li>
<li>확률값을 1로 만드는(loss가 최소가 되게 만드는 w를 찾아야함)</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<h2 id="dnn">DNN</h2>
</blockquote>
<ul>
<li>데이터의 모양이 non-linear일때 사용</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/52c41188-63c0-4bf0-b9a6-83889a17c508/image.png" alt=""></li>
<li>DNN이 아니여도 Feature transform으로 non-linear데이터셋을 linear로 해결이 가능하긴함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/41ffd17c-941f-45e3-9dd9-d987314190e8/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/972b0816-6a30-45a6-8499-ae5654efc0f6/image.png" alt=""></li>
<li>이는 feature가 만족하는 형태로 만들어질때까지 여러가지로 변환해봐야하는 단점이 있음</li>
<li>추가로 결국에는 원래의 모양(x,y좌표)은 non-linear라는 단점도 있다.</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>Neural Networks(non-linear문제 해결)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9f4a31b0-db2a-462e-90f9-74e1558a8b0d/image.png" alt=""></li>
<li>max를 취하는 이유 -&gt; linear의 특성을 피하기 위해<ul>
<li>max로 0보다 작은 값을 제거하면서 순서성을 부여하고 이는 결합법칙을 깨기때문에 linear의 특성을 깨버림</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/1a668fbb-46b9-40cc-8870-625338cc4099/image.png" alt=""></li>
</ul>
</li>
<li>w의 개수에 따라 n-layer Neural Network라고 표현<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/fb461011-cd6f-4db4-8729-36254bd5a302/image.png" alt=""></li>
</ul>
</li>
<li>Fully-connected(모든 데이터가 행렬곱셈에서 참여하는 것)</li>
</ul>
<hr>
<ul>
<li>레이어마다 계산된 값을 그다음 레이어에서 사용하고 중간중간 max함수로 0으로 만들어버리기 때문에 해석과 추적이 불가능함<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/640fe816-197d-4f6f-a0b6-c2f7ca8c6630/image.png" alt=""></li>
<li>레이어가 많을수록 분별력이 높아짐<h4 id="레이어를-찾아가면서-output을-내는것이-딥러닝deep-neural-networks"><em>레이어를 찾아가면서 output을 내는것이 딥러닝(Deep Neural Networks)</em></h4>
</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/f52a1a09-e49e-414a-9110-f617ced912ee/image.png" alt=""></li>
</ul>
<hr>
<blockquote>
<h3 id="regularization">Regularization</h3>
</blockquote>
<ul>
<li>위에서 레이어의 개수와 분별력은 비례한다고 하였음<ul>
<li>레이어가 많을떄의 단점도 있다(over-fitting)</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/3d9432b9-402c-4bf2-ad17-c8bbb59f4fa2/image.png" alt=""></li>
<li>over-fiting은 train데이터(실험용)과 test데이터(실제 사용시의 데이터)간의 차이에서 문제가 발생함<ul>
<li>train데이터에 너무 맞춰두면 실제 데이터에는 못 맞추는 경우가 늘어날 수 있음</li>
</ul>
</li>
<li>결국 train데이터는 많아질수록 에러가 적어지지만 test데이터의 양은 많아지면 에러가 많아질수 있음</li>
</ul>
</li>
<li>over-fitting을 피하기위해 사용하는 것이 정규화(Regularization)</li>
<li>loss값에 더해져서 loss펑션 자체를 바꾸는 것이 정규화<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9184150c-02ff-48d6-aaa6-6fdc63aa4ba6/image.png" alt=""></li>
<li>loss펑션에 붙어서 피팅을 방해해 오버피팅을 완화</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li>w에서 각각의 값이 너무 크거나 작으면 x각각에 대한 의존도가 높아짐(w의 range를 줄일 필요가 있다 -&gt; regularizer사용)</li>
<li>Regularizations<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/95cb3974-d135-48c7-be15-32cfa13ebf86/image.png" alt=""></li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/9cb72d34-6ab7-4ccf-8950-61eb13b39d63/image.png" alt=""></li>
<li>loss를 데이터, 정규화 loss 2가지로 나눠서 컨트롤<ul>
<li>오버피팅을 피하는게 목표라면 람다값을 높이면 됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/75459a00-1375-4e07-bacd-f965a53cb2c8/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/241f8004-e89f-4736-8709-93028cd1d0de/image.png" alt=""></li>
<li>레귤라이저 부분이 j에 해당하는 wj에 대해 미분이 되어서 람다wj만 남게 됨</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6edc1bed-ce57-4c8f-a825-85227f1ec03d/image.png" alt=""></li>
<li>앞에 있는 -가 데이터로스, 레귤라이저로스에 붙음<ul>
<li>n은 러닝레이트<h4 id="결론">결론</h4>
</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/5b2f9fd6-d1bb-48e5-a60b-081cdb562cd1/image.png" alt=""></li>
<li>L2 norm</li>
<li>업데이트과정에서 미분을 사용</li>
<li>레귤라이저가 음수면 더하는 값은 양수가 되고 레귤라이저가 양수면 더하는 값은 음수가 됨<ul>
<li>결과값의 절대값의 크기가 작아짐</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/52d26f2a-76f0-4a46-aed9-e8a8c3056346/image.png" alt=""></li>
<li>L1 norm</li>
<li>1보다 크면 1, 작으면 -1인 절대값 함수의 미분을 위해 sign함수를 사용<ul>
<li>미분하면 양수면 1, 음수면 -1이 나옴</li>
<li>결국에 앞에 -를 붙이기 때문에 갱신시 절대값의 크기가 작아지는것은 동일</li>
</ul>
</li>
</ul>
<hr>
<h4 id="l1-l2-norm의-차이">L1, L2 norm의 차이</h4>
<ul>
<li>L1은 1,-1만큼만 이동하고 L2는 본인의 값을 곱해서 이동</li>
<li>L2는 본인의 값을 곱하면서 본인의 값을 줄이기 떄문에 이동하는 거리가 점점 작아짐(non sparse)<ul>
<li>0에 매우 가까워지긴 하지만 0이되지는 않음</li>
</ul>
</li>
<li>L1은 Spaese한 특성이 있음<ul>
<li>실제로 0을 만들 수 있음, L2에 비해서 학습을 거듭하면 0을 만드는 횟수가 많아짐</li>
</ul>
</li>
</ul>
<hr>
<h4 id="연결선의-행렬-변환">연결선의 행렬 변환</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6d23fa95-b7c4-4470-9a87-6eba0d9d3fff/image.png" alt=""></li>
<li>왼쪽의 연결선을 오른쪽의 행렬의 곱으로 옮길 수 있음</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/6d02c177-7eaa-45b7-8f92-79367f1dc9ae/image.png" alt=""></li>
</ul>
<hr>
<h4 id="dropout">Dropout</h4>
<ul>
<li>정규화의 방법중 하나</li>
<li>딥러닝의 각 계층(레이어)에서 연결선이 너무 많으면 계산이 정확해서 결국 오버피팅 효과가 발생함</li>
<li>연결선의 일부분을 지워버려 과도하게 미세한 계산을 피하는 방법이 Dropout<ul>
<li>지우는 행렬의 값을 0으로 만들어 반영이 안되게 함</li>
</ul>
</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/aaa01387-22a2-4380-8b70-0d4704a54d5d/image.png" alt=""></li>
<li>앙상블 효과가 있다<ul>
<li>랜덤하게 연결선을 지우기 때문에 다양한 모양이 나와 성능이 향상된다</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/d888dd97-806e-4fee-aa69-73123e334848/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<h4 id="early-stop">Early-stop</h4>
<ul>
<li>오버피팅 되기전 학습을 중지하는 것</li>
<li>validation : test데이터를 활용하기 어렵기 때문에 train데이터의 일부를 학습전에 분리해 test데이터처럼 활용 하는 것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/7291b2a8-c148-4cd5-a9fc-353494e7bcd2/image.png" alt=""></li>
</ul>
<hr>
<h4 id="activation-functions">Activation Functions</h4>
<ul>
<li>종류가 여러개가 있다, 상황에 맞게 종류를 결정해야함</li>
<li>중요한 것은 non-linear성질을 다루기위해 사용한다는 것</li>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/31555308-2b03-4745-8099-191a857ca0c6/image.png" alt=""></li>
</ul>
<hr>
<h4 id="생물학적-뉴런과-유사">생물학적 뉴런과 유사</h4>
<ul>
<li><img src="https://velog.velcdn.com/images/3eung_h10n/post/690b84a9-ff5f-42d7-82f5-f90865cda0c8/image.png" alt=""></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>