<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>페리</title>
    <link>https://perry03.tistory.com/</link>
    <description>perry03 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 1 Jun 2026 19:43:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>페에이리</managingEditor>
    <image>
      <title>페리</title>
      <url>https://tistory1.daumcdn.net/tistory/7142965/attach/d12c92e91b074c87b0711716579aa87b</url>
      <link>https://perry03.tistory.com</link>
    </image>
    <item>
      <title>Refining explainability in chest x-ray diagnostics with lesion-aware hybrid transformer and local similarity of integrated re-normalized attention map</title>
      <link>https://perry03.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1746809426003204&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.sciencedirect.com/science/article/pii/S1746809426003204&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문은 지역적 특징을 잡는 CNN과 전역적 맥락을 포착하는 Transformer를 통합한 Thoraxformer를 제안한다. 단순한 성능 향상이 아닌, 밀집 어노테이션 없이도 병변의 위치를 설명 가능하게 만드는 것이 핵심 목표다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ABSTRACT&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer와 Foundation 모델은 다양한 분야에서 성공적으로 으용되고 있다. 하지만 데이터가 부족한 의료 영상 분석의 특성상, 이 모델들의 낮은 투명성은 기존 CNN 기반 방법들에 비해 의사결정 과정의 명확성을 저해한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 CNN과 Transformer를 통합한 Thoraxformer를 제안한다. CNN의 지역적 특징을 Transformer에 주입하는 특징 가중치 모듈로 귀납적 편향 문제를 보완하고, 병변 위치화 토큰과 CNN의 Saliency Map으로부터 파생된 위치 정보를 활용해 정밀한 병변 위치 맵을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChestX-ray와 CheXpert 데이터셋에서의 실험 결과, Thoraxformer는 질병 분류와 병변 위치 파악 모두에서 기존 방법들과 파운데이션 모델을 능가하였다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[1]. Introduction&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흉부 X-ray(CXR)는 비용 효율성과 높은 민감성으로 인해 가장 많이 사용되는 선별검사 기법 중 하나이다. 영상의학과 전문의가 다수의 의심 부위를 동시에 분석할수 있어 병리학적 이상 소견 검출이 용이하다. 그러나 정확한 판독에는 고도의 방사선과 전문 지식이 필요하며, 매일 쏟아지는 대량의 이미지는 전문의가 일관된 진단 성능을 유지하기 어렵게 만든다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1960년대부터 시작된 자동화 알고리즘 연구는 딥러닝의 등장과 함께 급격히 발전했다. 이 접근방식들은 주로 CNN에 의존해 왔다. CNN은 *수용영역과 풀링 연산으로 국소 특징을 추출하는 데 강점이 있지만, 고정된 수용영역 탓에 장거리 의존성과 전역적 특징을 포착하는 데 한계가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 ViT와 같은 트랜스포머 기반 모델은 전역적 표현 포착에 뛰어나 의료 분야에서 주목받고 있다. 그러나 트랜스포머는 귀납적 편향이 부족해 대규모 데이터를 필요로 하는데, 의료 분야는 데이터 확보 자체가 어렵다. 게다가 설명 가능성도 낮아 CNN용으로 설계된 Grad-CAM을 트랜스포머에 억지로 적용하는 경우가 많고, 이는 부정확한 병변 위치화로 이어진다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 52.7907%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9721%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 18.1858%; text-align: center;&quot;&gt;CNN&lt;/td&gt;
&lt;td style=&quot;width: 17.3093%; text-align: center;&quot;&gt;Transformer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9721%; text-align: center;&quot;&gt;특징 추출&lt;/td&gt;
&lt;td style=&quot;width: 18.1858%; text-align: center;&quot;&gt;국소적&lt;/td&gt;
&lt;td style=&quot;width: 17.3093%; text-align: center;&quot;&gt;전역적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9721%; text-align: center;&quot;&gt;귀납적 편향&lt;/td&gt;
&lt;td style=&quot;width: 18.1858%; text-align: center;&quot;&gt;강함&lt;/td&gt;
&lt;td style=&quot;width: 17.3093%; text-align: center;&quot;&gt;약함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9721%; text-align: center;&quot;&gt;데이터 요구량&lt;/td&gt;
&lt;td style=&quot;width: 18.1858%; text-align: center;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;width: 17.3093%; text-align: center;&quot;&gt;많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.9721%; text-align: center;&quot;&gt;설명 가능성&lt;/td&gt;
&lt;td style=&quot;width: 18.1858%; text-align: center;&quot;&gt;Grad-CAM 활용 가능&lt;/td&gt;
&lt;td style=&quot;width: 17.3093%; text-align: center;&quot;&gt;전용 방법 부재&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 한계를 동시에 해결하기 위해 논문은 Thoraxformer를 제안한다. CNN의 지역적 특징을 트랜스포머에 통합하는 특징 가중치 모듈과, 병변 위치화 전용으로 설계된 병변 위치화 토큰이 핵심이다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. Related work&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zCK7F/dJMcag6DOkD/5xrcIWDnBproFeQaKKaCq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zCK7F/dJMcag6DOkD/5xrcIWDnBproFeQaKKaCq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zCK7F/dJMcag6DOkD/5xrcIWDnBproFeQaKKaCq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzCK7F%2FdJMcag6DOkD%2F5xrcIWDnBproFeQaKKaCq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1130&quot; height=&quot;565&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;565&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 1은 Thoraxformer의 전체 구조로 특징 가중치 모듈과 병변 위치화 토큰을 도입하여 CXR 분석에서 트랜스포머의 설명 가능성을 향상시키도록 설계되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징 가중치 모듈은 CNN에서 트랜스포머로 국소 특징을 전달하는 역할을 하며, 병변 위치화 토큰은 기존에 클래스 토큰이 함께 담당하던 분류와 위치화를 명시적으로 분리한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btFXh8/dJMcafs7Bfm/PSlStudKaLikeaaFZMRN4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btFXh8/dJMcafs7Bfm/PSlStudKaLikeaaFZMRN4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btFXh8/dJMcafs7Bfm/PSlStudKaLikeaaFZMRN4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtFXh8%2FdJMcafs7Bfm%2FPSlStudKaLikeaaFZMRN4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;453&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig 2는 Softmax와 Sigmoid 함수를 사용한 어텐션 맵 정규화 비교 분석이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(a)와 (b)는 각각 일반 이미지에 Softmax와 Sigmoid 함수를 적용한 결과이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(c)는 CXR에 Softmax를 적용한 어텐션 맵, (d)는&amp;nbsp; Sigmoid를 적용한 어텐션 맵이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2.1}. Multi-label chest X-ray classification&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝이 의료 영상에 본격적으로 적용되기 시작한 건 Wang et al.이 14가지 흉부 질환이 담긴 대규모 CXR 데이터셋을 공개하면서부터다. 이후, DenseNet 구조를 기반으로 레이어 구성을 최적화한 CheXNet과 DNetLoc이 등장했다. 이어서 비대칭 서브네트워크에서 추출한 특징을 병합하는 방식(Chen et al.[13])과, 어텐션 매커니즘으로 판별력 있는 영역에 집중하는 방식(Chen et al.[14], Guan &amp;amp; Huang)으로 성능을 높이려는 시도가 이어졌다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ViT의 등장 이후에는 트랜스포머를 CXR 분석에 적용하려는 흐름이 크게 두 방향으로 나뉘었다. 하나는 SwinCheX, MXT처럼 더 발전된 트랜스포머 아키텍처를 그대로 활용하는 순수 트랜스포머 계열이고, 다른 하나는 트랜스포머의 부족한 귀납적 편향을 CNN으로 보완하는 IEViT, CheXViT 같은 하이브리드 계열이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이 모델들에는 공통적인 한계가 있었다. 성능은 올라갔지만, 왜 그런 진단을 내렸는지 시각적으로 설명하지 못한다. 설명이 필요할 때 CNN용인 Grad-CAM을 억지로 적용하는 경우가 많았고, 이는 부정확한 병변 위치화로 이어졌다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2.2}. Foundation Model&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 AI 분야는 파운데이션 모델의 등장과 함께 패러다임이 바뀌고 있다. 방대한 데이터로 사전학습된 범용 모델을 다양한 다운스트림 태스크에 미세조정해서 쓰는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비전 파운데이션 모델은 크게 두 방향으로 발전해 왔다. 이미지 생성 방향으로는 Stable Diffusion, DALL-E처럼 텍스트로 이미지를 만드는 모델이 등장했고, 이미지 분할 방향으로는 SAM처럼 프롬프트만으로 전경을 분리하는 모델이 나왔따. 여기에 CLIP처럼 이미지와 텍스트를 함께 학습하는 비전-언어 모델도 주목받고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의료 분야에서도 파운데이션 모델 개발이 활발하지만, 대부분 의료 질의응답, 보고서 요약 같은 텍스트 중심 과제에 집중되어 있다. 의료 영상용 비전-언어 데이터셋은 여전히 부족하고, 그 탓에 인코더가 의료 영상의 복잡한 특성을 충분히 학습하기 어렵다는 한계가 있다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 63.0233%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.856%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 22.641%; text-align: center;&quot;&gt;일반 파운데이션 모델&lt;/td&gt;
&lt;td style=&quot;width: 22.8561%; text-align: center;&quot;&gt;의료 파운데이션 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.856%; text-align: center;&quot;&gt;데이터 규모&lt;/td&gt;
&lt;td style=&quot;width: 22.641%; text-align: center;&quot;&gt;대규모&lt;/td&gt;
&lt;td style=&quot;width: 22.8561%; text-align: center;&quot;&gt;제한적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.856%; text-align: center;&quot;&gt;주요 과제&lt;/td&gt;
&lt;td style=&quot;width: 22.641%; text-align: center;&quot;&gt;생성, 분할, 분류 등 다양&lt;/td&gt;
&lt;td style=&quot;width: 22.8561%; text-align: center;&quot;&gt;텍스트 중심 (QA, 요약)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.856%; text-align: center;&quot;&gt;영상 적용&lt;/td&gt;
&lt;td style=&quot;width: 22.641%; text-align: center;&quot;&gt;활발&lt;/td&gt;
&lt;td style=&quot;width: 22.8561%; text-align: center;&quot;&gt;데이터 부족으로 제한적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CTVOB/dJMcagev8R5/GAMjMGQiMbQHcYhwk0P730/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CTVOB/dJMcagev8R5/GAMjMGQiMbQHcYhwk0P730/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CTVOB/dJMcagev8R5/GAMjMGQiMbQHcYhwk0P730/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCTVOB%2FdJMcagev8R5%2FGAMjMGQiMbQHcYhwk0P730%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;629&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig. 3는 Softmax가 적용되기 전에 LL token을 먼저 빼내서 Sigmoid로 따로 처리하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Softmax에 묻히기 전에 구출하는 구조라고 보면 된다. 덕분에 중간 강도의 병변 영역까지 살아나고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 다시 패치 전체에 영향을 줘서 위치화 정확도가 올라간다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2.3}. Explainability in computer vision&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNN의 해석 가능성을 높이기 위한 방법들은 크게 세 가지로 분류된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Gradient-based&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래디언트 기반은 역전파로 각 픽셀이 출력에 얼마나 기여했는지를 그래디언트로 측정한다. SmoothGrad와 Integrated gradient는 입력을 조금씩 변형하면서 평균 그래디언트 변화를 분석하고, Grad-CAM은 그래디언트를 가중치로 적용해 클래스 별 히트맵을 만든다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Pertubation-based&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;섭동 기반은 입력 이미지의 일부를 가리거나 변형했을 떄 출력이 얼마나 바뀌는지를 측정해 중요 영역을 파악한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). Attribution-based&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어트리뷰션 기반은 출력을 입력까지 역으로 분해하는 방식이다. LRP와 RAP는 출력에서 입력 방향으로 관련성 점수를 레이어마다 전파하고, DeepLIFT는 뉴련의 실제 활성화 값을 기준 활성화 값과 비교해 기여도를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이 세 방법은 모두 CNN 전용이다. 트랜스포머는 구조가 달라 별도의 방법이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attention Rollout은 레이어별 어텐션 점수를 누적해 정보 흐름을 추적하고, T-Attr은 LRP에서 영감을 받아 셀프-어텐션 레이어에 그래디언트 기반 어트리뷰션을 결합한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAE (Generic Attention Explainability)는 그래디언트로 각 어텐션 헤드의 클래스별 관련성을 측정해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 트랜스포머 아키텍처에 범용적으로 적용할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.2563%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.7927%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 23.1305%; text-align: center;&quot;&gt;Gradient-based&lt;/td&gt;
&lt;td style=&quot;width: 21.3891%; text-align: center;&quot;&gt;Perturbation-based&lt;/td&gt;
&lt;td style=&quot;width: 17.3807%; text-align: center;&quot;&gt;Attribution-based&lt;/td&gt;
&lt;td style=&quot;width: 20.5225%; text-align: center;&quot;&gt;Transformer 전용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.7927%; text-align: center;&quot;&gt;대표 기법&lt;/td&gt;
&lt;td style=&quot;width: 23.1305%; text-align: center;&quot;&gt;Grad-CAM, SmoothGrad&lt;/td&gt;
&lt;td style=&quot;width: 21.3891%; text-align: center;&quot;&gt;LIME, Occlusion&lt;/td&gt;
&lt;td style=&quot;width: 17.3807%; text-align: center;&quot;&gt;LRP, DeepLIFT&lt;/td&gt;
&lt;td style=&quot;width: 20.5225%; text-align: center;&quot;&gt;Attention Rollout, GAE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.7927%; text-align: center;&quot;&gt;적용 대상&lt;/td&gt;
&lt;td style=&quot;width: 23.1305%; text-align: center;&quot;&gt;CNN&lt;/td&gt;
&lt;td style=&quot;width: 21.3891%; text-align: center;&quot;&gt;모델 무관&lt;/td&gt;
&lt;td style=&quot;width: 17.3807%; text-align: center;&quot;&gt;CNN&lt;/td&gt;
&lt;td style=&quot;width: 20.5225%; text-align: center;&quot;&gt;Transformer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.7927%; text-align: center;&quot;&gt;설명 방식&lt;/td&gt;
&lt;td style=&quot;width: 23.1305%; text-align: center;&quot;&gt;그래디언트 히트맵&lt;/td&gt;
&lt;td style=&quot;width: 21.3891%; text-align: center;&quot;&gt;입력 변형 후 변화 측정&lt;/td&gt;
&lt;td style=&quot;width: 17.3807%; text-align: center;&quot;&gt;기여도 역전파&lt;/td&gt;
&lt;td style=&quot;width: 20.5225%; text-align: center;&quot;&gt;어텐션 점수 추적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 트랜스포머 방법들은 공통적으로 클래스 토큰 하나에 의존해 병변 위치화를 한다는 한계가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 Thoraxformer는 위치화 전용인 병변 위치화 토큰을 별도로 도입해 분류와 위치화를 명시적으로 분리한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. Background&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{3.1}. DINO &amp;amp; DINO v2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DINO는 레이블 없이 학습하는 자기지도 학습 모델이다. *학생 네트워크와 *교사 네트워크가 같은 이미지의 서로 다른 크롭을 각각 처리하면서, 둘의 출력이 일치하도록 학습하는 지식 증류 방식을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DINO v2는 이를 대규모 데이터셋으로 확장한 파운데이션 모델 버전으로, 중복 이미지 제거와 패치 수준 목적 함수 추가로 성능을 높였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{3.2}. SynCLR&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SynCLR의 특징은 이름 그대로 Synthetic(합성) + *CLR(Contrastive Learning, 대조 학습). 실제 데이터를 전혀 쓰지 않고 합성 데이터만으로 학습한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 과정은 두 단게이다. 먼저 사전 정의된 개념에서 캡션을 생성하고, 그 캡션을 기반으로 이미지를 생성한다. 이 캡션을 클래스로 취급하기 때문에 기존 방식보다 더 세밀한 분류 단위를 가진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 캡션으로 만들어진 이미지들의 표현이 동일한 임베딩 공간 안에서 가까워지도록 *멀티-포지티브 대조 학습으로 정렬한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. Method&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4.1}. Feature Weighting Module&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer는 귀납적 편향이 부족하기 때문에 대규모 데이터가 없으면 성능이 떨어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 의료 분야는 데이터 확보 자체가 어렵다. 이 문제를 해결하는 게 특징 가중치 모듈의 역할이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 아이디어는 CNN이 잘 뽑는 국소 특징을 Transformer의 *CLS 토큰에 가중치로 주입하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 기존 CNN과의 차이점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 CNN은 특징 맵을 벡터로 압축할 때 풀링 레이어를 써서 국소 정보가 손실된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모듈은 풀링 대신 합성곱 레이어를 사용해 국소 정보를 최대한 보존하면서 압축한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4.2}. Lesion localiztion token&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의료 분야에서 *밀집 어노테이션을 획득하는 것은 시간과 비용이 많이 소요된다. 이러한 이유로,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 연구들에서 병변 위치화를 위해 설명 가능한 방법들이 널리 활용되어 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중 Grad-CAM은 가장 빈번하게 사용되는 기법 중 하나이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 Grad-CAM은 CNN에 특화되어 설계되었기 때문에, 트랜스포머에 적용하기 위해서는 토큰을 재배열해야 하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 정밀한 병변 위치화를 제한한다. 나아가, 트랜스포머에 특화된 기존 방법들은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$x_{cls}$ (클래스 토큰)에 의존하며, 소프트맥스 함수의 반복적인 적용으로 인해 분류를 위한 판별적 특징이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과도하게 강조되어 전체 병변 영역을 효과적인 위치화가 제한된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 한계를 극복하기 위해, 논문에서는 위치화를 $$x_{\text{cls}}로부터 분리하고 병변 위치화를 위한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 특징을 포착하도록 특별히 설계된 보조 토큰인 병변 위치화 토큰을 제안한다. x_cls와 구조적으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 이 토큰은 패치 토큰에 추가된다.&amp;nbsp;&lt;/p&gt;
&lt;div data-math=&quot;x_{\text{input}} = [x_{\text{cls}}, x_p^1, x_p^2, \dots, x_{\text{loc}}]&quot;&gt;$$x_{\text{input}} = [x_{\text{cls}}, x_p^1, x_p^2, \dots, x_{\text{loc}}]$$&lt;/div&gt;
&lt;div data-math=&quot;x_{\text{input}} = [x_{\text{cls}}, x_p^1, x_p^2, \dots, x_{\text{loc}}]&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식은 x_cls, 패치 토큰 &lt;span&gt;&lt;span&gt;x_p^n, 병변 위치화 토큰 x_loc을 포함하는 입력 토큰 시퀀스 x_input을 나타낸다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;입력 토큰 시퀀스 형태는 (N + 2) * D이며, 여기서 N은 패치의 수를, D는 토큰의 차원을 나타낸다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lesion Localization Token &amp;nbsp;토큰에 Softmax를 그대로 쓰면 문제가 생긴다. Softmax는 전체 합이 1이 되도록 경쟁적으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규화하기 때문에, 가장 강한 한 지점에 어텐션이 몰리고 나머지는 억제돼버린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/64P8F/dJMcahRZLIN/VJNYWl9YGTJVpwcKCF5mb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/64P8F/dJMcahRZLIN/VJNYWl9YGTJVpwcKCF5mb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/64P8F/dJMcahRZLIN/VJNYWl9YGTJVpwcKCF5mb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F64P8F%2FdJMcahRZLIN%2FVJNYWl9YGTJVpwcKCF5mb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;690&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;690&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Fig 2는 Softmax와 Sigmoid 함수를 사용한 어텐션 맵 정규화 비교 분석이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(a)와 (b)는 각각 일반 이미지에 Softmax와 *Sigmoid 함수를 적용한 결과이고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(c)는 CXR에 Softmax를 적용한 어텐션 맵, (d)는&amp;nbsp; Sigmoid를 적용한 어텐션 맵이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Softmax 적용 시 병변 *바운딩 박스 밖에 어텐션이 쏠리거나, 박스 안을 한 점에만 집중하는 반면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid는 박스 안 병변 영역 전체를 균형 있게 강조한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Lesion Localization Token에는 Softmax 대신 Sigmoid로 재정규화를 적용한다. 이게 핵심 설계 선택이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig.3이 이 과정이 *MHSA 안에서 어떻게 동작하는지를 보여준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oY6uJ/dJMb997wKwk/eWASN2CFIg3vTJDDSMsbkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oY6uJ/dJMb997wKwk/eWASN2CFIg3vTJDDSMsbkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oY6uJ/dJMb997wKwk/eWASN2CFIg3vTJDDSMsbkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoY6uJ%2FdJMb997wKwk%2FeWASN2CFIg3vTJDDSMsbkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;886&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;886&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fig.3은 Softmax 적용 전에 Lesion Localization Token 을 먼저 추출해서 Sigmoid로 따로 처리하는 게 포인트다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Softmax에 묻히기 전에 구출해서 중간 강도의 병변 영역 정보를 살리는 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid 처리 후 Lesion Localization Token 은 두 갈래로 쓰인다. 하나는 Lesion Map 생성에 직접 사용되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 하나는 Expansion으로 확장되어 Softmax 결과와 곱해져 패치 토큰 전체를 강조하는 데 쓰인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{4.2}를 이어서 설명하자면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 셀프-어텐션과 같이 입력 토큰을 Q, K, V 세 행렬로 선형 투영하고, K와 Q로 어텐션 맵을 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지는 기존 Transformer와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Softmax를 적용하기 전에, Lesion Localization Token 을 어텐션 맵에서 먼저 추출하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어텐션 헤드 차원에 걸쳐 평균을 계산한다. 평균화된 토큰은 Sigmoid 함수로 재정규화된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재정규화 이후 이 토큰은 두 가지 브랜치로 처리된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;병변 위치화 맵 생성에 직접 사용된다.&lt;/li&gt;
&lt;li&gt;입력 토큰 크기에 맞게 확장되어 Softmax 이후의 토큰과 요소별 곱셈을 통해 스케일링 인자로 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 이를 통해 토큰 전반에 걸쳐 위치화 관련 특징의 강조가 촉진됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 모든 인코더 블록에서 반복하면서 위치화 특징이 출력까지 전파된다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4.2.1}. Generating lesion localization map and pseudo-labeling&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜스포머는 각 블록마다 서로 다른 영역을 강조하는 특성이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 고려하여 위치화 맵을 생성할 때 각 레이어 l에서 얻은 병변 맵을 집계하는 방식을 설계한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 레이어에서 병변 맵을 만드는 과정은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;재정규화 이후 병변 위치화 토큰 $x _{loc}^{l}$ 을 추출한다.&lt;/li&gt;
&lt;li&gt;소프트맥스로 정규화된 어텐션 맵에서 $x _{cls}^{l}$와 이에 대응하는 그래디언트 $▿x _{cls}^{l}$를 추출한다.&lt;/li&gt;
&lt;li&gt;$▿x _{cls}^{l}$에 ReLU를 적용하여 음수 기여를 제거한다.&lt;/li&gt;
&lt;li&gt;세 값 $x _{loc}^{l}$, $x _{cls}^{l}$, ReLU( $▿x _{cls}^{l}$)에 아다마르($∘\circ &lt;span aria-hidden=&quot;true&quot;&gt;∘$&lt;/span&gt;)을 적용하여 해당 레이어의 병변 맵을 생성한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 맵은 $x_{cls}^{l}$와 그래디언트를 함께 활용함으로써 분류 관련 정보와 위치화 정보를 결합한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 전체 레이어 L의 병변 맵을 집계하여 병변 위치화 맵 $M_{loc}$을 생성하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재형성 함수 F를 적용하여 입력 형태에 맞게 정렬한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$M_{loc}&amp;nbsp;=&amp;nbsp;F&amp;nbsp;\left(&amp;nbsp;\sum_{l=1}^{L}&amp;nbsp;x_{loc}^{l}&amp;nbsp;\circ&amp;nbsp;x_{cls}^{l}&amp;nbsp;\circ&amp;nbsp;\text{ReLU}(\nabla&amp;nbsp;x_{cls}^{l})&amp;nbsp;\right)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병변 위치화 맵을 더 정밀하게 만들기 위해 유사도 기반 보조 손실을 도입한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN의 가장 깊은 레이어에서 얻은 살리언시 맵을 의사 레이블($M_{pseudo}$)로 활용하여, 병변 위치화 맵 $M_{loc}$과의 코사인 유사도로 손실을 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$L_{sim}&amp;nbsp;=&amp;nbsp;\begin{cases}&amp;nbsp;1&amp;nbsp;-&amp;nbsp;\cos(M_{loc},&amp;nbsp;M_{pseudo}),&amp;nbsp;&amp;amp;&amp;nbsp;\text{if&amp;nbsp;positive&amp;nbsp;area}&amp;nbsp;\\&amp;nbsp;\max(0,&amp;nbsp;\cos(M_{loc},&amp;nbsp;M_{pseudo})&amp;nbsp;-&amp;nbsp;\text{margin}),&amp;nbsp;&amp;amp;&amp;nbsp;\text{otherwise}&amp;nbsp;\end{cases}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 손실은 분류 손실과 보조 손실의 합으로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$L_{total}&amp;nbsp;=&amp;nbsp;L_{cls}&amp;nbsp;+&amp;nbsp;\lambda&amp;nbsp;L_{sim}$$&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 61.3954%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.8303%; text-align: center;&quot;&gt;손실&lt;/td&gt;
&lt;td style=&quot;width: 45.162%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.8303%; text-align: center;&quot;&gt;$L_{cls}$&lt;/td&gt;
&lt;td style=&quot;width: 45.162%; text-align: left;&quot;&gt;다중 레이블 소프트 마진 손실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.8303%; text-align: center;&quot;&gt;$L_{sim}$&lt;/td&gt;
&lt;td style=&quot;width: 45.162%; text-align: left;&quot;&gt;$M_{loc}$과 $M_{pseudo}$ 간 코사인 유사도 기반 보조 손실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.8303%; text-align: center;&quot;&gt;&amp;lambda;&lt;/td&gt;
&lt;td style=&quot;width: 45.162%; text-align: left;&quot;&gt;보조 손실 영향 조절 하이퍼파라미터 (기본값 0.5)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;살리언시 맵은 거친 표현 특성상 넓고 흐릿하게 영역을 강조하는 경향이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lambda;로 보조 손실의 영향을 보절한다. 논문에서는 &amp;lambda; = 0.5를 기본값으로 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기호 정리 :&amp;nbsp;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 55.5812%; height: 189px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;기호&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: center;&quot;&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;$M_{loc}$&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;병변 위치화 맵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;$M_{pseudo}$&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;CNN 가장 깊은 레이어의 살리언시 맵(의사 레이블)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;$L_{sim}$&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;유사도 기반 보조 손실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;$L_{cls}$&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;분류 손실 (다중 레이블 소프트 마진 손실)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;$L_{total}$&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;전체 손실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;&amp;lambda;&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;보조 손실 영향 조절 하이퍼파라미터 (기본값 0.5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;&lt;span&gt;cos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;sdot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;sdot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;코사인 유사도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2096%; height: 21px; text-align: center;&quot;&gt;margin&lt;/td&gt;
&lt;td style=&quot;width: 39.0161%; height: 21px; text-align: left;&quot;&gt;음수 영역에서 손실 발생 기준 임계값&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. Experiments and ressults&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.1}. Datasets and preprocessing&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서는 두 가지 대규모 CXR 데이터셋을 활용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChestX-ray14&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CheXpert&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처리 및 데이터 증강은 아래와 같이 적용했다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 48.3721%; height: 139px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.7004%; text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 57.9296%; text-align: center;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.7004%; text-align: center;&quot;&gt;이미지 크기 조정&lt;/td&gt;
&lt;td style=&quot;width: 57.9296%; text-align: center;&quot;&gt;224 x 224&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.7004%; text-align: center;&quot;&gt;정규화&lt;/td&gt;
&lt;td style=&quot;width: 57.9296%; text-align: center;&quot;&gt;ImageNet 평균 및 표준편차 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.7004%; text-align: center;&quot;&gt;데이터 증강&lt;/td&gt;
&lt;td style=&quot;width: 57.9296%; text-align: center;&quot;&gt;무작위 회전, 수평 뒤집기, 무작위 줌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.1.1}. ChestX-ray14&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 44.9999%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8165%; text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 21.6923%; text-align: center;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8165%; text-align: center;&quot;&gt;환자 수&lt;/td&gt;
&lt;td style=&quot;width: 21.6923%; text-align: center;&quot;&gt;30,805명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8165%; text-align: center;&quot;&gt;이미지 수&lt;/td&gt;
&lt;td style=&quot;width: 21.6923%; text-align: center;&quot;&gt;112,120장 (정면 CXR)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8165%; text-align: center;&quot;&gt;질환 클래스 수&lt;/td&gt;
&lt;td style=&quot;width: 21.6923%; text-align: center;&quot;&gt;14개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8165%; text-align: center;&quot;&gt;바운딩 박스 제공 질환&lt;/td&gt;
&lt;td style=&quot;width: 21.6923%; text-align: center;&quot;&gt;8개&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14가지 흉부 질환 레이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Atelectasis(무기폐), Cardiomegaly(심비대), Effusion(삼출),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Infiltration(침윤), Mass(종괴), Nodule(결절), Pneumonia(폐렴),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pneumothorax(기흉), Consolidation(경화), Edema(부종),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Emphysema(폐기종), Fibrosis(섬유증), Pleural Thickening(흉막 비후), Hernia(탈장) 이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 이미지에는 하나 이상의 레이블이 부여될 수 있으며, 질환이 감지되지 않는 경우는 No Finding으로 분류된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 8가지 질환에 대한 바운딩 박스 어노테이션이 제공된다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{5.1.2}. CheXpert&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 61.1628%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2162%; text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 34.9466%; text-align: center;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2162%; text-align: center;&quot;&gt;환자 수&lt;/td&gt;
&lt;td style=&quot;width: 34.9466%; text-align: center;&quot;&gt;65,240명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2162%; text-align: center;&quot;&gt;이미지 수&lt;/td&gt;
&lt;td style=&quot;width: 34.9466%; text-align: center;&quot;&gt;224,315장 (정면 + 측면 CXR)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2162%; text-align: center;&quot;&gt;질환 클래스 수&lt;/td&gt;
&lt;td style=&quot;width: 34.9466%; text-align: center;&quot;&gt;14개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2162%; text-align: center;&quot;&gt;레이블 형식&lt;/td&gt;
&lt;td style=&quot;width: 34.9466%; text-align: center;&quot;&gt;양성 / 음성 / 불확실&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2162%; text-align: center;&quot;&gt;병변 위치화 평가 클래스 수&lt;/td&gt;
&lt;td style=&quot;width: 34.9466%; text-align: center;&quot;&gt;10개 (인간 어노테이션 기반 바운딩 박스)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14가지 클래스 레이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Atelectasis(무기폐), Cardiomegaly(심비대), consolidation(경화), Edema(부종),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cardiomediastinum(심종격 확대), Fracture(골절), Lung Lesion(폐 병변),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lung Opacity(폐 불투명), No Finding(정상), Pleural Effusion(흉막 삼출),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pleural Other(기타 흉막 질환), Pneumonia(폐렴), Pneumothorax(기흉), Support Devices(보조 장치)가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불확실 레이블은 이전 연구들의 프로토콜에 따라 학습 시 음성으로 처리하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 성능은 공식 데이터셋 분할 기준으로 평가하였으며,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병변 위치화는 인간 어노테이션 기반 10개 클래스의 바운딩 박스로 평가하였다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.2}. Implementation details&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 42.7907%; height: 112px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 10px; text-align: center;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 10px; text-align: center;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 17px; text-align: center;&quot;&gt;GPU&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 17px; text-align: center;&quot;&gt;NVIDIA RTX 3090&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 17px; text-align: center;&quot;&gt;프레임워크&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 17px; text-align: center;&quot;&gt;PyTorch 2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 17px; text-align: center;&quot;&gt;배치 크기&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 17px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 17px; text-align: center;&quot;&gt;옵티마이저&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 17px; text-align: center;&quot;&gt;Adam (초기 학습률 0.0001)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 17px; text-align: center;&quot;&gt;학습률 스케쥴러&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 17px; text-align: center;&quot;&gt;코사인 어닐링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.3256%; height: 17px; text-align: center;&quot;&gt;분류 손실&lt;/td&gt;
&lt;td style=&quot;width: 25.4651%; height: 17px; text-align: center;&quot;&gt;다중 레이블 소프트 마진 손실&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파운데이션 모델 미세 조정 시, 이미지 인코더를 사전 학습된 가중치로 초기화한 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 레이블 흉부 X-ray 분류를 위한 헤드를 추가하였다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.3}. Multi-label chest X-ray classification&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 레이블 분류 성능 평가에는 AUC(Area Under the Curve) 점수를 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균 AUC(전체 클래스)와 클래스별 AUC를 모두 분석하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 대상은 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전 연구들 : 동일한 데이터 분할, 동일한 클래스 수 사용&lt;/li&gt;
&lt;li&gt;미세 조정된 파운데이션 모델 : 각 데이터셋에서 높은 성능을 달성한 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 결과는 Table 1(ChestX-ray14)과 Table 2(CheXpert)에 제시된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;911&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HZ7jQ/dJMcaaSXhvk/7ryvTyUBRuBKsRXSNYPNXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HZ7jQ/dJMcaaSXhvk/7ryvTyUBRuBKsRXSNYPNXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HZ7jQ/dJMcaaSXhvk/7ryvTyUBRuBKsRXSNYPNXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHZ7jQ%2FdJMcaaSXhvk%2F7ryvTyUBRuBKsRXSNYPNXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;911&quot; height=&quot;484&quot; data-origin-width=&quot;911&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 테이블의 모델들을 설명하자면 아래와 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 91.0465%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.628%; text-align: center;&quot;&gt;모델&lt;/td&gt;
&lt;td style=&quot;width: 74.4185%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.628%; text-align: center;&quot;&gt;ChexNet&lt;/td&gt;
&lt;td style=&quot;width: 74.4185%;&quot;&gt;DenseNet-121 기반으로 흉부 X-ray에서 14가지 질환을 분류하는 초기 대표 CNN 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.628%; text-align: center;&quot;&gt;DNet (DNetLoc)&lt;/td&gt;
&lt;td style=&quot;width: 74.4185%;&quot;&gt;DenseNet 기반으로 고해상도 이미지와 병변의 공간적 위치 정보를 함께 활용해 분류하는 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.628%; text-align: center;&quot;&gt;CRAL&lt;/td&gt;
&lt;td style=&quot;width: 74.4185%;&quot;&gt;CNN으로 추출한 특징에 카테고리별 잔차 어텐션을 적용해 관련 없는 클래스 영향을 억제하는 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.628%; text-align: center;&quot;&gt;LLAGNet&lt;/td&gt;
&lt;td style=&quot;width: 74.4185%;&quot;&gt;의료 영상, CXR에서 다중 라벨 흉부 질환을 분류하고 병변의 위치를 찾아내는 데 특화된 모델&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.628%; text-align: center;&quot;&gt;SwinCheX&lt;/td&gt;
&lt;td style=&quot;width: 74.4185%;&quot;&gt;Swin Transformer 아키텍처를 활용해 흉부 X-ray 분류 성능을 높인 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 91.1628%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;모델&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;MXT&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%;&quot;&gt;Pyramid Vision Transformer 기반으로 흉부 X-ray 다중 레이블 분류를 위해 설계된 트랜스포머 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;ViT&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%;&quot;&gt;이미지를 패치로 잘라 트랜스포머에 입력하는 기본 비전 트랜스포머 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;DINO / DINO v2&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%;&quot;&gt;레이블 없이 지식 증류 기반 자기지도 학습으로 사전학습된 파운데이션 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;SynCLR&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%;&quot;&gt;합성 데이터만으로 멀티-포지티브 대조 학습을 통해 사전학습된 파운데이션 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;CheXGCN&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%;&quot;&gt;질환 간 동시 발생 관계를 그래프 구조로 모델링해 분류하는 그래프 합성곱 신경망 기반 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%; text-align: center;&quot;&gt;SSGE&lt;/td&gt;
&lt;td style=&quot;width: 74.3023%;&quot;&gt;(무슨 모델인지 못찾겠음)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.3.1}. Comparison with previous studies&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). ChestX-ray14 결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thoraxformer는 평균 AUC 0.861을 달성하여 기존 방법들을 능가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14개 클래스 중 12개에서 우수한 성능을 보이며, 특히 무기폐, 심비대, 경화에서 현저히 높은 AUC를 기록한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 결절, 폐기종처럼 병변 영역이 작은 클래스에서는 일부 이전 모델이 약간 더 나은 성능을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). CheXpert 결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thoraxformer는 평균 AUC 0.86을 달성하여 이전 모델들을 능가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무기폐를 포함한 10개 클래스에서 우수한 성능을 보이며, 특히 경화, 폐 병변, 폐 불투명, 기타 흉막 질환에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현저한 성능 향상을 달성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단 Fracture(골절) AUC 0.689처럼 이미지에서 작은 영역을 차지하는 클래스에서는 성능이 낮아,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국소 특징 영향력을 강화하는 방법의 필요성을 시사한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.3.2}. Comparison with foundation models&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 데이터셋 모두에서 Thoraxformer는 미세 조정된 파운데이션 모델들 대비&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 높은 평균 AUC를 달성한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ChestX-ray14 : 모든 클래스에 걸쳐 파운데이션 모델들을 일관되게 능가함&lt;/li&gt;
&lt;li&gt;CheXpert : 대부분의 클래스에서 1위를 기록하나, 무기폐에서는 DINO에 이어 2위를 기록한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파운데이션 모델 간 비교에서는 DINO가 두 데이터셋 모두에서 가장 높은 성능을 달성한 반면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SynCLR은 가장 낮은성능을 보였다. 합성 데이터로 사전학습된 특징이&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 다운스크림 태스크 전이에 최적화되어 있지 않음을 시사한다고 한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.4}. Lesion localization&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 연구들의 코드 및 사전 학습된 가중치 가용성이 제한적이어서, Thoraxformer의 병변 위치화 성능을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미세 조정된 파운데이션 모델에 적용한 Attention Rollout과 GAE와 비교하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교는 정량적, 정성적 두 관점에서 수행되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정량적 평가 지표 :&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.3721%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3721%; text-align: center;&quot;&gt;지표&lt;/td&gt;
&lt;td style=&quot;width: 70%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3721%; text-align: center;&quot;&gt;외부-내부 관련성 비율&lt;/td&gt;
&lt;td style=&quot;width: 70%;&quot;&gt;바운딩 박스 내부/외부에서 임계값을 초과하는 픽셀 수 측정. 낮을수록 위치화 성능이 좋음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3721%; text-align: center;&quot;&gt;포인팅 게임&lt;/td&gt;
&lt;td style=&quot;width: 70%;&quot;&gt;살리언시 맵의 최대값 지점이 바운딩 박스 내에 위치하는지 판별&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3721%; text-align: center;&quot;&gt;정밀도 / 재현율 / F1 점수&lt;/td&gt;
&lt;td style=&quot;width: 70%;&quot;&gt;바운딩 박스 내 포착된 에너지를 기반으로 성능 평가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정성적 평가 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바운딩 박스 어노테이션이 포함된 시각적 설명을 분석하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병변 위치화의 해석 가능성과 정확성을 평가하였다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.4.1}. Quantitative evaluations&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부-내부 관련성 비율과 포인팅 게임 두 가지 지표로 평가하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부-내부 관련성 비율은 낮을수록 병변 영역에 더 정확하게 집중함으로 의미하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thoraxformer가 두 데이터셋 모두에서 가장 낮은 비율을 기록하며 1위를 달성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ViT with GAE가 근소한 차이로 2위를 기록한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인팅 게임에서도 Thoraxformer는 모든 평가 지표에서 가장 높은 성능을 달성하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 정밀도에서 현저한 우위를 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 평가 모두에서 GAE는 Attention Rollout을 일관되게 능가하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히, CheXpert에서 성능 차이가 두드러진다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.4.2}. Qualitative evaluations&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바운딩 박스 기반 정성적 평가 결과,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 행은 ViT, DINO, DINO v2, SynCLR, Thoraxformer 순으로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attention Rollout과 Thoraxformer를 비교해보면&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 70.4651%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.5828%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25.9336%; text-align: center;&quot;&gt;Attention Rollout / GAE&lt;/td&gt;
&lt;td style=&quot;width: 30.0459%; text-align: center;&quot;&gt;Thoraxformer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.5828%; text-align: center;&quot;&gt;강조 방식&lt;/td&gt;
&lt;td style=&quot;width: 25.9336%;&quot;&gt;점 형태로 특정 지점에 집중&lt;/td&gt;
&lt;td style=&quot;width: 30.0459%;&quot;&gt;병변 전체 영역을 포괄적으로 강조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.5828%; text-align: center;&quot;&gt;비병변 영역&lt;/td&gt;
&lt;td style=&quot;width: 25.9336%;&quot;&gt;목, 어깨 등에서 위양성 빈번&lt;/td&gt;
&lt;td style=&quot;width: 30.0459%;&quot;&gt;병변 인접 영역에서 정확한 위치화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.5828%; text-align: center;&quot;&gt;측면 이미지&lt;/td&gt;
&lt;td style=&quot;width: 25.9336%;&quot;&gt;폐 경계 등 관련 없는 영역 강조&lt;/td&gt;
&lt;td style=&quot;width: 30.0459%;&quot;&gt;촬영 방향에 관계없이 병변 영역 포착&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAE는 Attention Rollout보다 바운딩 박스 포착에서 나온 성능을 보이지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여전히 강조가 나타난다는 한계가 있다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5.5}. Ablation studies&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 구성 요소를 하나씩제거했을 때 성능이 어떻게 변하는지 분석하는 실험이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 94.0698%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 17.2868%; height: 21px; text-align: center;&quot;&gt;제거한 구성 요소&lt;/td&gt;
&lt;td style=&quot;width: 27.0542%; height: 21px; text-align: center;&quot;&gt;분류 성능&lt;/td&gt;
&lt;td style=&quot;width: 49.7287%; height: 21px; text-align: center;&quot;&gt;병변 위치화 성능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 17.2868%; height: 21px; text-align: center;&quot;&gt;특징 가중치 모듈&lt;/td&gt;
&lt;td style=&quot;width: 27.0542%; height: 21px;&quot;&gt;AUC 0.792 / 0.822로 큰 폭 하락&lt;/td&gt;
&lt;td style=&quot;width: 49.7287%; height: 21px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 17.2868%; height: 21px; text-align: center;&quot;&gt;의사 레이블링&lt;/td&gt;
&lt;td style=&quot;width: 27.0542%; height: 21px;&quot;&gt;소폭 하락&lt;/td&gt;
&lt;td style=&quot;width: 49.7287%; height: 21px;&quot;&gt;바운딩 박스 내 어텐션 집중 실패, 목&amp;middot;어깨 등 엉뚱한 영역에 집중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 17.2868%; height: 21px; text-align: center;&quot;&gt;병변 위치화 토큰&lt;/td&gt;
&lt;td style=&quot;width: 27.0542%; height: 21px;&quot;&gt;소폭 하락&lt;/td&gt;
&lt;td style=&quot;width: 49.7287%; height: 21px;&quot;&gt;점 형태의 강조, 병변과 무관한 영역 강조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 17.2868%; height: 21px; text-align: center;&quot;&gt;재정규화&lt;/td&gt;
&lt;td style=&quot;width: 27.0542%; height: 21px;&quot;&gt;소폭 하락&lt;/td&gt;
&lt;td style=&quot;width: 49.7287%; height: 21px;&quot;&gt;위치화 일관되게 실패, 가장 낮은 정성적 성능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 종괴, 결절처럼 병변이 작은 지로한에서 특징 가중치 모듈 제거 시 성능 차이가 두드러진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서 &lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;lambda; 값을 0, 0.5, 1로 변경해 실험한 결과,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;전반적인 성능 변화는 작았다. 하지만 너무 낮으면 위치화 맵 정제가 부족하고,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;너무 높으면 의사 레이블에 과도하게 의존해 성능이 떨어진다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적의 균형값은 0.5이다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. Conclusion&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thoraxformer는 CNN의 국소 특징과 Transformer의 전역 특징을 통합하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흉부 X-ray 분류의 설명 가능성을 높인 모델이다. 두 가지 핵심 기여를 통해 이를 실현한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징 가중치 모듈 : CNN 특징 맵을 가중치 벡터로 변환해 Transformer에 국소 정보를 주입&lt;/li&gt;
&lt;li&gt;병변 위치화 토큰 : 분류와 위치화를 명시적으로 분리해 클래스 토큰 기반 방법의 한계 극복&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재정규화와 의사 레이블링을 추가하여 높은 어텐션 영역과 중간 어텐션 영역 모두를 활용함으로써&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;병변 위치화 정확도를 높였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험 결과, Thoraxformer는 기존 방법들과 파운데이션 모델들을 능가하는 성능을 입증하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프레임워크는 의사 레이블 생성과 국소 특징 추출 모두를 CNN에 의존하고 있어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아키텍처 유연성에 제약이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;향후 CNN 없이 순수 트랜스포머 기반으로 동작하는 프레임워크 개발을 목표로 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;느낀점&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 논문을 정리하면서 깨달은 것이 있다. 논문을 처음부터 끝까지 완벽하게 이해하려고 파고들 필요는 없다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Abstract와 Introduction에서 논문이 나온 이유를 파악하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Method에서 무엇을 해결했는지를 이해하면 결과는 자연스럽게 읽힌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 논문을 읽을 때는 처음부터 모든 수식과 구현 세부 사항을 전부 이해하려 하기보다,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 흐름을 잡고 필요한 부분만 파고드는 방식으로 접근할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문이 스스로 인정한 한계는 Thoraxformer가 아직 CNN에 의존하고 있다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;향후 순수 Transformer 기반 프레임워크 개발을 목표로 한다고 밝혔는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순수 Transformer란 RNN이나 CNN 구조를 배제하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오직 Attention 메커니즘만으로 입력 데이터의 전역적 관계를 학습하는 신경망 아키텍처다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 실현된다면 의료 영상에 국한되지 않고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넓은 맥락을 보면서 작은 부분도 정확하게 찾아야 하는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자율주행, 위성&amp;middot;항공 영상 분석, 산업 결함 탐지, 보안 CCTV 분석 등 다양한 분야에서도 큰 영향을 발휘할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개념 정리 :&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 수용영역 :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 뉴런이 반응을 일으키는 감각 자극의 범위나 영역&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 학생 네트워크 &amp;amp; 교사 네트워크 :&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;학생 네트워크 : 용량이 작고 계산이 빠른 가벼운 CNN 모델&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;교사 네트워크 : 수만 장의 고해상도 CT 영상을 학습한 거대한 트랜스포머 모델&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. CLR (Contrastive Learning) :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정답 없이도 유사한 데이터는 가깝게, 다른 데이터는 멀어지도록 비교하며&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터의 핵심 특징을 스스로 학습하는 머신러닝 기법&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 멀티-포지티브 :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 하나에 대해 정답(긍정적)이 될 수 있는&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;유사한 데이터를 여러 개 매칭하여 학습하는 방식&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. CLS 토큰 (Classification Token) :&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트랜스포머 기반 모델의 *입력 시퀀스 맨 앞에 추가되는 학습 가능한 특수 토큰&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전체 입력의 의미를 하나로 압축한 대표 벡터로, 최종 분류 작업에 사용된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 밀집 어노테이션 :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미지, 영상 등의 데이터에서 객체나 영역을 매우 촘촘하게 정답 라벨링하는 기법&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7 . 입력 시퀀스 :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델 입장에서 순서대로 읽어 내려가야 하는 데이터의 한 세트&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 모델에 입력으로 집어넣는 순서가 있는 데이터의 한 묶음을 뜻한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8 . Sigmoid :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 픽셀마다 독립적으로 확률을 계산해서 조건이 맞으면&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;고르게 1에 가깝게 색칠할 수 있는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;9 . 바운딩 박스&amp;nbsp; :&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미지나 영상에서 특정 객체의 위치와 크기를 사각형 상자로 범위를 지정하는&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 라벨링 기법&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;10. MHSA (Multi Head Self Attention) :&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하나의 입력 시퀀스(x_{\text{input}})를 여러 차원(헤드)으로 쪼개어 동시에 병렬 분석함으로써,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 내부의 복잡한 맥락과 연관성을 입체적으로 포착하는 엔진이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;11. 정량적 &amp;amp; 정성적 평가 :&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정량적 평가 : 평가 대상을 수치화된 데이터(숫자, 통계, 양)를 바탕으로 객관적으로 측정하고 평가하는 방법&lt;/li&gt;
&lt;li&gt;정성적 평가 : 숫자로 바꾸기 어려운 성질, 특징, 만족도, 맥락, 경험 등을 주관적 해석이나 기준을 바탕으로 평가하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출처 :&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@yun_haaaa/%EB%85%BC%EB%AC%B8-%EC%9D%BD%EA%B8%B0-8-Deep-Mutual-Learning&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@yun_haaaa/%EB%85%BC%EB%AC%B8-%EC%9D%BD%EA%B8%B0-8-Deep-Mutual-Learning&lt;/a&gt; - 학생 네트워크 &amp;amp; 교사 네트워크&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1779255260159&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[UROP #8] Deep Mutual Learning (1)&quot; data-og-description=&quot;Paper : https://arxiv.org/abs/1706.00384&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@yun_haaaa/%EB%85%BC%EB%AC%B8-%EC%9D%BD%EA%B8%B0-8-Deep-Mutual-Learning&quot; data-og-url=&quot;https://velog.io/@yun_haaaa/논문-읽기-8-Deep-Mutual-Learning&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHpmXe/dJMb88e6nDN/aFxQPEQAKSkXvWfjW8RLgk/img.jpg?width=1268&amp;amp;height=771&amp;amp;face=0_0_1268_771,https://scrap.kakaocdn.net/dn/bqCHJ1/dJMb8Rj7IvX/jPoIYts8578wHcSA5NVxmk/img.jpg?width=1268&amp;amp;height=771&amp;amp;face=0_0_1268_771,https://scrap.kakaocdn.net/dn/dW2kft/dJMb9iIMBHQ/ElxwejlLjbfBHKEKOU1kbk/img.jpg?width=1268&amp;amp;height=771&amp;amp;face=0_0_1268_771&quot;&gt;&lt;a href=&quot;https://velog.io/@yun_haaaa/%EB%85%BC%EB%AC%B8-%EC%9D%BD%EA%B8%B0-8-Deep-Mutual-Learning&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@yun_haaaa/%EB%85%BC%EB%AC%B8-%EC%9D%BD%EA%B8%B0-8-Deep-Mutual-Learning&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHpmXe/dJMb88e6nDN/aFxQPEQAKSkXvWfjW8RLgk/img.jpg?width=1268&amp;amp;height=771&amp;amp;face=0_0_1268_771,https://scrap.kakaocdn.net/dn/bqCHJ1/dJMb8Rj7IvX/jPoIYts8578wHcSA5NVxmk/img.jpg?width=1268&amp;amp;height=771&amp;amp;face=0_0_1268_771,https://scrap.kakaocdn.net/dn/dW2kft/dJMb9iIMBHQ/ElxwejlLjbfBHKEKOU1kbk/img.jpg?width=1268&amp;amp;height=771&amp;amp;face=0_0_1268_771');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[UROP #8] Deep Mutual Learning (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Paper : https://arxiv.org/abs/1706.00384&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jaylala.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-with-Python-Self-Supervised-Learning-2-%EB%8C%80%EC%A1%B0%ED%95%99%EC%8A%B5Contrastive-Learning&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jaylala.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-with-Python-Self-Supervised-Learning-2-%EB%8C%80%EC%A1%B0%ED%95%99%EC%8A%B5Contrastive-Learning &lt;/a&gt;&amp;nbsp;- 대조학습&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1779255338346&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[딥러닝 with Python] Self-Supervised Learning (2) : 대조학습(Contrastive Learning)&quot; data-og-description=&quot;이번에는 자기지도학습(Self-Supervised Learning, SSL)의 방법 중&amp;nbsp;&amp;nbsp;대조학습(Contrastive Learning)에 대해서 알아보고자 합니다.&amp;nbsp;&amp;nbsp;1. 대조학습(Contrastive Learning)이란?- 대조학습은 유사한 데이터(Positive Sample)&quot; data-og-host=&quot;jaylala.tistory.com&quot; data-og-source-url=&quot;https://jaylala.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-with-Python-Self-Supervised-Learning-2-%EB%8C%80%EC%A1%B0%ED%95%99%EC%8A%B5Contrastive-Learning&quot; data-og-url=&quot;https://jaylala.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-with-Python-Self-Supervised-Learning-2-%EB%8C%80%EC%A1%B0%ED%95%99%EC%8A%B5Contrastive-Learning&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cnfql7/dJMb8UHUToH/EZZizVFX1tuA9ZJXyvAbM0/img.png?width=675&amp;amp;height=675&amp;amp;face=0_0_675_675,https://scrap.kakaocdn.net/dn/bBqtoV/dJMb8YXRjxl/NHCSHGF1h6ppxCMcu91o0K/img.png?width=675&amp;amp;height=675&amp;amp;face=0_0_675_675,https://scrap.kakaocdn.net/dn/FvXbX/dJMb8Xkk6rX/KAof02w6UrduUFl5O2ByaK/img.png?width=675&amp;amp;height=675&amp;amp;face=0_0_675_675&quot;&gt;&lt;a href=&quot;https://jaylala.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-with-Python-Self-Supervised-Learning-2-%EB%8C%80%EC%A1%B0%ED%95%99%EC%8A%B5Contrastive-Learning&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jaylala.tistory.com/entry/%EB%94%A5%EB%9F%AC%EB%8B%9D-with-Python-Self-Supervised-Learning-2-%EB%8C%80%EC%A1%B0%ED%95%99%EC%8A%B5Contrastive-Learning&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cnfql7/dJMb8UHUToH/EZZizVFX1tuA9ZJXyvAbM0/img.png?width=675&amp;amp;height=675&amp;amp;face=0_0_675_675,https://scrap.kakaocdn.net/dn/bBqtoV/dJMb8YXRjxl/NHCSHGF1h6ppxCMcu91o0K/img.png?width=675&amp;amp;height=675&amp;amp;face=0_0_675_675,https://scrap.kakaocdn.net/dn/FvXbX/dJMb8Xkk6rX/KAof02w6UrduUFl5O2ByaK/img.png?width=675&amp;amp;height=675&amp;amp;face=0_0_675_675');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[딥러닝 with Python] Self-Supervised Learning (2) : 대조학습(Contrastive Learning)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번에는 자기지도학습(Self-Supervised Learning, SSL)의 방법 중&amp;nbsp;&amp;nbsp;대조학습(Contrastive Learning)에 대해서 알아보고자 합니다.&amp;nbsp;&amp;nbsp;1. 대조학습(Contrastive Learning)이란?- 대조학습은 유사한 데이터(Positive Sample)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jaylala.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tmdhhey.tistory.com/131#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tmdhhey.tistory.com/131#google_vignette&amp;nbsp;&lt;/a&gt; - CLS&lt;/p&gt;
&lt;figure id=&quot;og_1779255361416&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Transformer] BERT와 ViT에서 CLS 토큰이 문장(또는 이미지)을 대표하는 이유&quot; data-og-description=&quot;Transformer 기반 모델에서는 하나의 시퀀스를 하나의 벡터로 요약해야 하는 경우가 많음.예를 들어:문장 분류: 한 문장을 하나의 벡터로 표현이미지 분류: 한 장의 이미지를 하나의 벡터로 표현이&quot; data-og-host=&quot;tmdhhey.tistory.com&quot; data-og-source-url=&quot;https://tmdhhey.tistory.com/131#google_vignette&quot; data-og-url=&quot;https://tmdhhey.tistory.com/131&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dOHPWp/dJMb9b3XGYk/nFygiWKclvUky2k4QfRxuk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cmSQ6Q/dJMb9hC6R5g/s5LfMRXDR2nIW12SlfwQkk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b6e56d/dJMb9hC6R5h/VLAzlTQBk1s96uk8Pln4Tk/img.jpg?width=666&amp;amp;height=608&amp;amp;face=0_0_666_608&quot;&gt;&lt;a href=&quot;https://tmdhhey.tistory.com/131#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tmdhhey.tistory.com/131#google_vignette&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dOHPWp/dJMb9b3XGYk/nFygiWKclvUky2k4QfRxuk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cmSQ6Q/dJMb9hC6R5g/s5LfMRXDR2nIW12SlfwQkk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b6e56d/dJMb9hC6R5h/VLAzlTQBk1s96uk8Pln4Tk/img.jpg?width=666&amp;amp;height=608&amp;amp;face=0_0_666_608');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Transformer] BERT와 ViT에서 CLS 토큰이 문장(또는 이미지)을 대표하는 이유&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Transformer 기반 모델에서는 하나의 시퀀스를 하나의 벡터로 요약해야 하는 경우가 많음.예를 들어:문장 분류: 한 문장을 하나의 벡터로 표현이미지 분류: 한 장의 이미지를 하나의 벡터로 표현이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tmdhhey.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powerofsummary.tistory.com/202&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powerofsummary.tistory.com/202&amp;nbsp;&lt;/a&gt;- MHSA(Multihead self-attention)&lt;/p&gt;
&lt;figure id=&quot;og_1779264510031&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[transformer] Multihead self-attention 과 multihead attention비교&quot; data-og-description=&quot;요새 비전분야에서도 transformer가 많이 활용되고 있어서 관련 논문들을 읽어보는데 의문인 부분들이 있어서 정리겸 블로그에 글을 써본다. transformer의 encoder는 MHSA(multihead self-attention)만 사용하고&quot; data-og-host=&quot;powerofsummary.tistory.com&quot; data-og-source-url=&quot;https://powerofsummary.tistory.com/202&quot; data-og-url=&quot;https://powerofsummary.tistory.com/202&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b5PauR/dJMb88e6o7d/QILt2eOoxzZy9qr5C9MjBk/img.png?width=700&amp;amp;height=831&amp;amp;face=0_0_700_831,https://scrap.kakaocdn.net/dn/ccQNCZ/dJMb9bv7VFC/HTcc9SXOjFkZS8ylHkS1p0/img.png?width=700&amp;amp;height=831&amp;amp;face=0_0_700_831,https://scrap.kakaocdn.net/dn/cd3wNM/dJMb84qek9K/2AlgtsbS8GZ7KVsnudbQQ1/img.png?width=700&amp;amp;height=831&amp;amp;face=0_0_700_831&quot;&gt;&lt;a href=&quot;https://powerofsummary.tistory.com/202&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powerofsummary.tistory.com/202&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b5PauR/dJMb88e6o7d/QILt2eOoxzZy9qr5C9MjBk/img.png?width=700&amp;amp;height=831&amp;amp;face=0_0_700_831,https://scrap.kakaocdn.net/dn/ccQNCZ/dJMb9bv7VFC/HTcc9SXOjFkZS8ylHkS1p0/img.png?width=700&amp;amp;height=831&amp;amp;face=0_0_700_831,https://scrap.kakaocdn.net/dn/cd3wNM/dJMb84qek9K/2AlgtsbS8GZ7KVsnudbQQ1/img.png?width=700&amp;amp;height=831&amp;amp;face=0_0_700_831');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[transformer] Multihead self-attention 과 multihead attention비교&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;요새 비전분야에서도 transformer가 많이 활용되고 있어서 관련 논문들을 읽어보는데 의문인 부분들이 있어서 정리겸 블로그에 글을 써본다. transformer의 encoder는 MHSA(multihead self-attention)만 사용하고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powerofsummary.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jaylala.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-%EB%A9%80%ED%8B%B0%ED%97%A4%EB%93%9C-%EC%85%80%ED%94%84-%EC%96%B4%ED%85%90%EC%85%98Multi-Head-Self-Attention#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jaylala.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-%EB%A9%80%ED%8B%B0%ED%97%A4%EB%93%9C-%EC%85%80%ED%94%84-%EC%96%B4%ED%85%90%EC%85%98Multi-Head-Self-Attention#google_vignette&lt;/a&gt; - MHSA&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1779274941984&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[개념정리] 멀티헤드 셀프 어텐션(Multi-Head Self-Attention)&quot; data-og-description=&quot;이번에 알아볼 개념은 멀티 헤드 셀프 어텐션(Multi-Head Self Attnetion) 입니다. [개념정리] Self attention / 셀프 어텐션 지난번에 알아봤던, 셀프 어텐션이 조금은 차이나는 방식으로 여러번 적용되었다&quot; data-og-host=&quot;jaylala.tistory.com&quot; data-og-source-url=&quot;https://jaylala.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-%EB%A9%80%ED%8B%B0%ED%97%A4%EB%93%9C-%EC%85%80%ED%94%84-%EC%96%B4%ED%85%90%EC%85%98Multi-Head-Self-Attention#google_vignette&quot; data-og-url=&quot;https://jaylala.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-%EB%A9%80%ED%8B%B0%ED%97%A4%EB%93%9C-%EC%85%80%ED%94%84-%EC%96%B4%ED%85%90%EC%85%98Multi-Head-Self-Attention&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dJgU0v/dJMb8QMhNin/INBj9t95sI2JRug4oJmGek/img.png?width=800&amp;amp;height=801&amp;amp;face=0_0_800_801,https://scrap.kakaocdn.net/dn/bMmME9/dJMb9efjGvb/3pU8h5wjW8Z7VuQrqHtVp1/img.png?width=800&amp;amp;height=801&amp;amp;face=0_0_800_801,https://scrap.kakaocdn.net/dn/czS9wi/dJMb9fZA09K/EK4Rx0jSjGPUUuRNXwNi30/img.png?width=1426&amp;amp;height=1428&amp;amp;face=0_0_1426_1428&quot;&gt;&lt;a href=&quot;https://jaylala.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-%EB%A9%80%ED%8B%B0%ED%97%A4%EB%93%9C-%EC%85%80%ED%94%84-%EC%96%B4%ED%85%90%EC%85%98Multi-Head-Self-Attention#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jaylala.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-%EB%A9%80%ED%8B%B0%ED%97%A4%EB%93%9C-%EC%85%80%ED%94%84-%EC%96%B4%ED%85%90%EC%85%98Multi-Head-Self-Attention#google_vignette&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dJgU0v/dJMb8QMhNin/INBj9t95sI2JRug4oJmGek/img.png?width=800&amp;amp;height=801&amp;amp;face=0_0_800_801,https://scrap.kakaocdn.net/dn/bMmME9/dJMb9efjGvb/3pU8h5wjW8Z7VuQrqHtVp1/img.png?width=800&amp;amp;height=801&amp;amp;face=0_0_800_801,https://scrap.kakaocdn.net/dn/czS9wi/dJMb9fZA09K/EK4Rx0jSjGPUUuRNXwNi30/img.png?width=1426&amp;amp;height=1428&amp;amp;face=0_0_1426_1428');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[개념정리] 멀티헤드 셀프 어텐션(Multi-Head Self-Attention)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번에 알아볼 개념은 멀티 헤드 셀프 어텐션(Multi-Head Self Attnetion) 입니다. [개념정리] Self attention / 셀프 어텐션 지난번에 알아봤던, 셀프 어텐션이 조금은 차이나는 방식으로 여러번 적용되었다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jaylala.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/논문 &amp;amp; 연구자료</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/32</guid>
      <comments>https://perry03.tistory.com/32#entry32comment</comments>
      <pubDate>Sun, 24 May 2026 00:06:42 +0900</pubDate>
    </item>
    <item>
      <title>Xception</title>
      <link>https://perry03.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1610.02357&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/1610.02357&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778898143124&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Xception: Deep Learning with Depthwise Separable Convolutions&quot; data-og-description=&quot;We present an interpretation of Inception modules in convolutional neural networks as being an intermediate step in-between regular convolution and the depthwise separable convolution operation (a depthwise convolution followed by a pointwise convolution).&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1610.02357&quot; data-og-url=&quot;https://arxiv.org/abs/1610.02357v3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ceCq3C/dJMb81fXPI4/dGz7UQsVR0vWUAPnSQKNwk/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/sD48i/dJMb83kyabU/kIrQP8wweeI4HhV9l2OFm0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1610.02357&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1610.02357&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ceCq3C/dJMb81fXPI4/dGz7UQsVR0vWUAPnSQKNwk/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/sD48i/dJMb83kyabU/kIrQP8wweeI4HhV9l2OFm0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Xception: Deep Learning with Depthwise Separable Convolutions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;We present an interpretation of Inception modules in convolutional neural networks as being an intermediate step in-between regular convolution and the depthwise separable convolution operation (a depthwise convolution followed by a pointwise convolution).&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Xception : Deep Learning with Depthwise Separable Convolutions라는 논문에서 제안한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 분류 작업을 위해 설게 된 CNN 아키텍처이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Xception은 극단적인(eXterme)과 인셉션(Inception)을 합친 단어이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. Inception과 차이점&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Inception&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1x1 Conv로 채널 관계를 먼저 압축&lt;/li&gt;
&lt;li&gt;그다음 3x3, 5x5 등으로 공간 패턴 감&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 채널과 공간을 어느 정도 분리&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Xception&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;채널과 공간을 완전히 분리&lt;/li&gt;
&lt;li&gt;채널은 *Pointwise(1x1)만, 공간은 *Depthwise만 전담&lt;/li&gt;
&lt;li&gt;Inception의 분리 아이디어를 극단까지 밀어붙인 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이름이 eXtreme + Inception = Xception인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inception을 극단적으로 밀면 어떻게 될까?라는 질문에서 출발한 모델이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? Pointwise &amp;amp; Depthwise&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pointwise : 채널들을 가로질러 정보 합산&lt;/li&gt;
&lt;li&gt;Depthwise : 채널별로 따로따로 공간 패턴 추출&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. Depthwise Separable Convolution&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 Convolution은 &quot;공간 패턴 감지&quot;와 &quot;채널 간 관계 파악&quot;을 한 번에 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Depthwise Separable Convolution은 두 단계로 분리한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Depthwise Convolution - 채널별로 따로 처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 : 필터 하나가 R, G, B 3 채널을 동시에 훑음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Depthwise : 채널마다 전담 필터를 따로 배정해서 각자 훑음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;R 채널 &amp;rarr; R 전담 필터&lt;/li&gt;
&lt;li&gt;G 채널&amp;nbsp;&amp;rarr; G 전담 필터&lt;/li&gt;
&lt;li&gt;B 채널&amp;nbsp;&amp;rarr; B 전담 필터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 공간 패턴만 담당하고 채널 간 관계는 아직 안봄&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Pointwise Convolution - 채널 간 관계 파악&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1x1 Conv 필터로 채널들을 가로로 묶어서 관계를 파악&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[R결과, G결과, B결과] &amp;rarr; 1x1 Conv &amp;rarr; 채널 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채널 간관계만 담당하고, 공간은 안봄&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 왜 분리하면 좋은가? - 연산량 감소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 방식은 요리사 한 명이 재료 손질 + 조리를 동시에 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Separable 방식은 손질 담당, 조리 담당을 분업해서 각자 자기 일만 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분업하면 전체 작업량이 줄어드는 것처럼, 연산량과 파라미터 수가 크게 줄어든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, Depthwise(공간 처리)와 Pointwise(채널 처리)를 분리해서, 더 적은 연산으로 같은 결과를 낸다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. 기존 Convolution vs Depthwise Separable Convolution 비교&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 조건 설명&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 이미지 : 8x8, 채널 3개 (RGB)&lt;/li&gt;
&lt;li&gt;필터 크기 : 3x3&lt;/li&gt;
&lt;li&gt;출력 채널 : 16개&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 기존 Convolution 연산량&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필터 하나가 공간 + 채널을 동시에 처리&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필터 하나의 크기 : 3x3x3 = 27&lt;/li&gt;
&lt;li&gt;필터 개수 : 16개&lt;/li&gt;
&lt;li&gt;위치 수 : 6x6 = 36&lt;/li&gt;
&lt;li&gt;총 연산 : 27x 16 x 36 - 15,552&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. Depthwise Separable Convolution 연산량&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Depthwise (공간만 처리)&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필터 하나으 크기 : 3x3 = 9&lt;/li&gt;
&lt;li&gt;채널 수 : 3개 (채널별 전담)&lt;/li&gt;
&lt;li&gt;위치 수 : 6x6 = 36&lt;/li&gt;
&lt;li&gt;연산 : 9 x 3 x 36 = 972&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Pointwise (채널만 처리)&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필터 크기 : 1x1x3&lt;/li&gt;
&lt;li&gt;필터 개수 : 16개&lt;/li&gt;
&lt;li&gt;위치 수 : 6x6 = 36&lt;/li&gt;
&lt;li&gt;연산 : 3 x16 x 36 = 1,728&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 연산 : 972 + 1,728 = 2,700&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Convolution : 연산량 = 15,552&lt;/li&gt;
&lt;li&gt;Depthwise Separable : 연산량 = 2,700&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 결과를 내는데 연산량이 약 83% 감소&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. Xception 전체 아키텍처 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 구조를 한 줄로 정리하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 정제 &amp;rarr; 핵심 반복 학습 &amp;rarr; 최종 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Entry Flow - 원자제 가공&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공장에 원자제(이미지)가 들어오면 본격 작업 전에 기본 가공부터 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 Convolution으로 기초 특징을 먼저 뽑는다.&lt;/li&gt;
&lt;li&gt;Depthwise Separable Conv 블록을 3번 거치면 점점 압축&lt;/li&gt;
&lt;li&gt;이미지 크기를 줄이고, 채널 수를 늘려나감&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 이미지 &amp;rarr; 채널 수 증가, 공간 크기 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(원자재를 다루기 좋은 형태로 1차 가공)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Middle Flow - 핵심 반복 공정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가공된 재료를 같은 공정으로 8번 반복해서 정밀하게 다듬는다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 Depthwise Separable Conv 블록을 8회 반복&lt;/li&gt;
&lt;li&gt;크기 변화 없이 특징만 점점 정교해짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 라인을 8번 반복 통과하여 재료를 계속 다듬어 품질을 높이는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복 횟수가 많은 이유는 이미지의 복잡한 패턴은 한 번에 파악이 안 되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복할수록 더 정교한 특징을 잡아낸다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. Exit Flow - 최종 검수 및 출하&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정체된 특징을 최종 판단 가능한 형태로 변환한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Depthwise Separable Conv 블록&amp;nbsp; 2번 더 처리&lt;/li&gt;
&lt;li&gt;GAP(Global Average Pooling)로 압축&lt;/li&gt;
&lt;li&gt;FC Layer &amp;rarr; Softmax로 최종 분류 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 전체 흐름&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Entry Flow : 원자재 1차 가공 (기초 특징 추출 + 압축)&lt;/li&gt;
&lt;li&gt;Middle Flow : 핵심 반복 공정 x 8 (특징 정교화)&lt;/li&gt;
&lt;li&gt;Exit Flow : 최종 검수 + 출하 (압축 &amp;rarr; 분류)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. 성능 및 의의&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Inception V3 대비 성능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터 수는 Xception 약 2,285만 개, Inception V3 약 2,362만 개로 거의 동일함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 조건에서 두 개를 비교해 보면&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;34e0ee22-aed1-8066-abec-d6ac2e26d9ac&quot; style=&quot;border-collapse: collapse; width: 44.8838%; height: 134px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;34e0ee22-aed1-8020-a4f3-e8371f9318f1&quot;&gt;
&lt;td id=&quot;{CHH&quot; style=&quot;width: 21.6176%;&quot;&gt;데이터셋&lt;/td&gt;
&lt;td id=&quot;F:FV&quot; style=&quot;width: 12.6908%;&quot;&gt;Xception&lt;/td&gt;
&lt;td id=&quot;^EmN&quot; style=&quot;width: 17.0696%;&quot;&gt;Inception V3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;34e0ee22-aed1-806b-b057-fe35e9765560&quot;&gt;
&lt;td id=&quot;{CHH&quot; style=&quot;width: 21.6176%;&quot;&gt;ImageNet Top-1&lt;/td&gt;
&lt;td id=&quot;F:FV&quot; style=&quot;width: 12.6908%;&quot;&gt;79.0%&lt;/td&gt;
&lt;td id=&quot;^EmN&quot; style=&quot;width: 17.0696%;&quot;&gt;78.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;34e0ee22-aed1-8071-be5f-def86f6b7d06&quot;&gt;
&lt;td id=&quot;{CHH&quot; style=&quot;width: 21.6176%;&quot;&gt;ImageNet Top-5&lt;/td&gt;
&lt;td id=&quot;F:FV&quot; style=&quot;width: 12.6908%;&quot;&gt;94.5%&lt;/td&gt;
&lt;td id=&quot;^EmN&quot; style=&quot;width: 17.0696%;&quot;&gt;94.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;34e0ee22-aed1-80f6-9457-e76c7e3628f3&quot;&gt;
&lt;td id=&quot;{CHH&quot; style=&quot;width: 21.6176%;&quot;&gt;JFT (3.5억 장)&lt;/td&gt;
&lt;td id=&quot;F:FV&quot; style=&quot;width: 12.6908%;&quot;&gt;+4.3% 향상&lt;/td&gt;
&lt;td id=&quot;^EmN&quot; style=&quot;width: 17.0696%;&quot;&gt;기준선&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ImageNet에서는 근소한 차이지만 3억 5천만 장 규모의 대형 데이터셋 JFT에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Xception이 유의미하게 더 뛰어난 성능을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{2}. 어떤 상황에서 쓰이나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의료 X-Ray 분류, 악성코드 탐지, 식물 분류 등 다양한 도메인에서 높은 성능을 보이고 있으며,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 전이학습 기반으로 활용되는 경우가 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전이학습이란&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대규모 데이터셋으로 미리 학습된 모델을 가져와,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하려는 새로운 목적에 맞게 재학습하는 머신러닝 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대용량 데이터 환경 : Xception이 특히 강함&lt;/li&gt;
&lt;li&gt;전이학습 베이스 모델로 활용 : 이미 학습된 가중치를 가져다 fine-tuning&lt;/li&gt;
&lt;li&gt;연산 자원이 제한적인 환경 : 파라미터 수 대비 효율이 좋아서 유리&lt;/li&gt;
&lt;li&gt;의료 이미지 분류 : MRI, X-Ray 등 세밀한 패턴 감지가 필요한 도메인&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI/논문 &amp;amp; 연구자료</category>
      <category>AI</category>
      <category>xception</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/31</guid>
      <comments>https://perry03.tistory.com/31#entry31comment</comments>
      <pubDate>Sat, 16 May 2026 11:25:34 +0900</pubDate>
    </item>
    <item>
      <title>선형대수 2</title>
      <link>https://perry03.tistory.com/30</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. 정방행렬 (Square Matrix )&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행과 열의 크기가 같은 행렬&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rsnpk/dJMcaipOUJ2/lDK1A6kv4y2mkzdXSAN7n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rsnpk/dJMcaipOUJ2/lDK1A6kv4y2mkzdXSAN7n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rsnpk/dJMcaipOUJ2/lDK1A6kv4y2mkzdXSAN7n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frsnpk%2FdJMcaipOUJ2%2FlDK1A6kv4y2mkzdXSAN7n1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;318&quot; height=&quot;150&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정방행렬 특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;차수 : 행과 열의 크기가 n으로 같으므로 보통 'n차 정방행렬'이고 함&lt;/li&gt;
&lt;li&gt;주대각선 : 왼쪽에서 오른쪽 아래로 이어지는 대각선 성분들이 존재함&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정방행렬에도 종류가 다양하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정방행렬은 딥러닝 모델의 Layer 구조를 설계할 때 자주 등장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 입력 데이터 512차원이고 출력도 512차원인 레이어의 가중치는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;512 x 512 정방행렬이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜스포머 모델에서 문장 내 단어들끼리의 관계를 계산할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단어 개수가 N개라면 N x N 정방행렬을 만들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단어 간의 상관관계를 분석한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 상관변환&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정방행렬 중 직교행렬을 이용한 좌표 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터의 길이와 각도를 그대로 유지하면서 좌표만 바꾸는 변환&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;91&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x2Rmz/dJMcadaUbzZ/tKCS5vYklTwvdms1HzDJKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x2Rmz/dJMcadaUbzZ/tKCS5vYklTwvdms1HzDJKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x2Rmz/dJMcadaUbzZ/tKCS5vYklTwvdms1HzDJKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx2Rmz%2FdJMcadaUbzZ%2FtKCS5vYklTwvdms1HzDJKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;91&quot; height=&quot;41&quot; data-origin-width=&quot;91&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정방행렬 Q가 위를 만족하면 직교행렬이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;74&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn58zp/dJMcaakZ2ad/gKGGiaMjpkqTQFZmkITyU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn58zp/dJMcaakZ2ad/gKGGiaMjpkqTQFZmkITyU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn58zp/dJMcaakZ2ad/gKGGiaMjpkqTQFZmkITyU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn58zp%2FdJMcaakZ2ad%2FgKGGiaMjpkqTQFZmkITyU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;74&quot; height=&quot;45&quot; data-origin-width=&quot;74&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 변환하게 되면 상관변환이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터 공간을 회전하거나 반사시키는 변환이다. 그래서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;길이&lt;/li&gt;
&lt;li&gt;각도&lt;/li&gt;
&lt;li&gt;거리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 변하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2]. 대각행렬 (Diagonal Matrix)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주 대각 성분을 제외한 모든 성분의 값이 0인 행렬이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;181&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NgD9K/dJMcaiJ4wyO/XmDgEZHcLvGKjT5G09FTTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NgD9K/dJMcaiJ4wyO/XmDgEZHcLvGKjT5G09FTTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NgD9K/dJMcaiJ4wyO/XmDgEZHcLvGKjT5G09FTTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNgD9K%2FdJMcaiJ4wyO%2FXmDgEZHcLvGKjT5G09FTTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;181&quot; height=&quot;95&quot; data-origin-width=&quot;181&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주대각선 성분은 0일 수도 있고, 0이 아닐 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 성분들은 반드시 0이어야 하나도.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대각행렬은 딥러닝의 효율성과 수치 안정성을 위해 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 레이어에서 각 뉴런의 영향력을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립적으로 조절하고 싶을 때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬 곱셈을 할 때 A가 대각행렬이면 각 요소끼리만 곱하면 되므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수만 개의 파라미터를 계산해야 하는 딥러닝에서 연산 비용을 줄일 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3]. 삼각행렬 (Trianglar Matrix)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼각행렬은 대각선 기준으로 두 개로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{1}. 상삼각행렬 (Upper Triangular Matrix)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주대각선을 기준으로 위쪽 부분에만 성분이 있고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래쪽은 성분은 모두 0인 행렬이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmHRj/dJMcabxq67f/HvYzrUAm0kBvpHkbJLT9p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmHRj/dJMcabxq67f/HvYzrUAm0kBvpHkbJLT9p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmHRj/dJMcabxq67f/HvYzrUAm0kBvpHkbJLT9p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpmHRj%2FdJMcabxq67f%2FHvYzrUAm0kBvpHkbJLT9p0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;176&quot; height=&quot;93&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징 : i &amp;gt; j인 모든 성분은 a_ij = 0이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{2}. 하삼각행렬 (Lower Triangular Matrix)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주대각선을 기준으로 아래쪽 부분에만 성분이 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위쪽 성분은 모두 0인 행렬이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;187&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djs4Ef/dJMcajhVz1S/HQ0tYQj0aLEPcxVRASzoZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djs4Ef/dJMcajhVz1S/HQ0tYQj0aLEPcxVRASzoZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djs4Ef/dJMcajhVz1S/HQ0tYQj0aLEPcxVRASzoZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdjs4Ef%2FdJMcajhVz1S%2FHQ0tYQj0aLEPcxVRASzoZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;187&quot; height=&quot;96&quot; data-origin-width=&quot;187&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징 : i &amp;lt; j인 모든 성분은 a_ij = 0이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상/하삼각행렬은 생성형 모델의 학습 과정에서 필수다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM이 문장을 생성할 때, 현재단어가 미래의 단어를 미리 보고 커닝하지 못하게 막아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 미래 단어 위치의 값들을 0으로 날려버리기 위해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상삼각행렬 형태의 마스크를 씌운다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 최적화 과정에서 복잡한 가중치 행렬을 계산하기 쉬운&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 삼각행렬 곱으로 나누어 처리한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3]. 항등행렬 (Identity Matrix)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주대각선의 성분들만 1이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 성분들은 모두 0인 행렬이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vVHkV/dJMcac4bgS3/yHmV9mvWnF1eugCVvKmQb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vVHkV/dJMcac4bgS3/yHmV9mvWnF1eugCVvKmQb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vVHkV/dJMcac4bgS3/yHmV9mvWnF1eugCVvKmQb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvVHkV%2FdJMcac4bgS3%2FyHmV9mvWnF1eugCVvKmQb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;297&quot; height=&quot;91&quot; data-origin-width=&quot;297&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곱셈에서 어떤 수에 1을 곱해도 자기 자신이 나오듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 행렬 A에 항등행렬 I를 곱해도 항상 자기 자신인 A가 나오기 때문에 항등이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A x I = I x A = A&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항등 행렬은 딥러닝 모델의 정보 보존에 핵심적인 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*ResNet 같은 깊은 신경망에서 입력 데이터 x의 정보가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;층을 지나며 소실되지 않게 그대로 전달할 때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;y = f(x) + i * x 구조를 통해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 정보(x)를 유지하며 학습 효율을 높인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값이 변형되지 않고 층을 통과하게 유도함으로써&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기울기 소실 문제를 방지하기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[4]. 역행렬&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n x n 행렬 A에 대해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곱해서 단위행렬이 나오게 하는 행렬을 행렬 A의 역행렬이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A x B = B x A = I&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식으로 표현하면 위와 같고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 B가 행렬 A의 역행렬이라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역행렬을 구하는 법은 두 가지가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가우스-조단 소거법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Adjoint 행렬을 이용한 방법&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 가우스-조던 소거법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;확장 행렬&quot;을 사용해서 역행렬을 만들 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역행렬을 구하고자 하는 행렬 A을 왼쪽에&lt;/li&gt;
&lt;li&gt;단위행렬 I를 오른쪽에 배치&lt;/li&gt;
&lt;li&gt;각 행의 실수곱을 통해 왼쪽 행렬을 단위행렬로 만들면&lt;/li&gt;
&lt;li&gt;오른쪽에 역행렬 B가 나온다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbBPc6/dJMcafGElio/g4oLchLiuHimBb86Xu3NIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbBPc6/dJMcafGElio/g4oLchLiuHimBb86Xu3NIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbBPc6/dJMcafGElio/g4oLchLiuHimBb86Xu3NIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbBPc6%2FdJMcafGElio%2Fg4oLchLiuHimBb86Xu3NIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;298&quot; height=&quot;128&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A : 원래 행렬&lt;/li&gt;
&lt;li&gt;I : 같은 크기의 단위행렬&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서 행 연산을 이용해 왼쪽을 단위행렬로 만들어준다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 행을 교환&lt;/li&gt;
&lt;li&gt;한 행에 상수 곱하기&lt;/li&gt;
&lt;li&gt;한 행에 다른 행의 배수를 더하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;78&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C6SQh/dJMcagMkWHN/uLH0yp1l6YDlnSnjHxAle1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C6SQh/dJMcagMkWHN/uLH0yp1l6YDlnSnjHxAle1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C6SQh/dJMcagMkWHN/uLH0yp1l6YDlnSnjHxAle1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC6SQh%2FdJMcagMkWHN%2FuLH0yp1l6YDlnSnjHxAle1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;78&quot; height=&quot;39&quot; data-origin-width=&quot;78&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 과정을 진행하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t4w3N/dJMcadhKER1/qEyv6zNscDsSce5I3oqwh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4w3N/dJMcadhKER1/qEyv6zNscDsSce5I3oqwh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4w3N/dJMcadhKER1/qEyv6zNscDsSce5I3oqwh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4w3N%2FdJMcadhKER1%2FqEyv6zNscDsSce5I3oqwh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;124&quot; height=&quot;59&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬 A를 확장 행렬로 만들면 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beQKu9/dJMcaaFl6V7/UPOL5cYpsj5gssCHAFYQFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beQKu9/dJMcaaFl6V7/UPOL5cYpsj5gssCHAFYQFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beQKu9/dJMcaaFl6V7/UPOL5cYpsj5gssCHAFYQFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeQKu9%2FdJMcaaFl6V7%2FUPOL5cYpsj5gssCHAFYQFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;148&quot; height=&quot;56&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서 아래 원소를 아래 수식과 같이 제거하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Row2 = Row2 - 3 * Row1&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J4b7C/dJMcaii2ywi/KkLgDM6KjBDGi8bJ0Z160K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J4b7C/dJMcaii2ywi/KkLgDM6KjBDGi8bJ0Z160K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J4b7C/dJMcaii2ywi/KkLgDM6KjBDGi8bJ0Z160K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ4b7C%2FdJMcaii2ywi%2FKkLgDM6KjBDGi8bJ0Z160K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;168&quot; height=&quot;67&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 피벗(중심점)을 1로 만들기 위해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Row2 / (-2)를 하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpnVNB/dJMcajvtICp/21qyVtAFQk03ULk6ZKAFb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpnVNB/dJMcajvtICp/21qyVtAFQk03ULk6ZKAFb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpnVNB/dJMcajvtICp/21qyVtAFQk03ULk6ZKAFb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpnVNB%2FdJMcajvtICp%2F21qyVtAFQk03ULk6ZKAFb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;148&quot; height=&quot;55&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 왼쪽에 있는 2를 제거하기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Row1 = Row1 - 2 * Row2를 하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;194&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4zXiZ/dJMcabjXVad/xr7vqKz7Ao8yEYblohxNDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4zXiZ/dJMcabjXVad/xr7vqKz7Ao8yEYblohxNDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4zXiZ/dJMcabjXVad/xr7vqKz7Ao8yEYblohxNDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4zXiZ%2FdJMcabjXVad%2Fxr7vqKz7Ao8yEYblohxNDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;194&quot; height=&quot;69&quot; data-origin-width=&quot;194&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A의 역행렬을 완성할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/epqix2/dJMcacDaidg/ObGy5qkogAeKAj6fuXfV2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/epqix2/dJMcacDaidg/ObGy5qkogAeKAj6fuXfV2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/epqix2/dJMcacDaidg/ObGy5qkogAeKAj6fuXfV2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fepqix2%2FdJMcacDaidg%2FObGy5qkogAeKAj6fuXfV2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;58&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Adjoint 행렬을 이용한 방법&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;182&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1hFtz/dJMb99TV9Hs/6tTyFOf0MXQK2NQOZJnTT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1hFtz/dJMb99TV9Hs/6tTyFOf0MXQK2NQOZJnTT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1hFtz/dJMb99TV9Hs/6tTyFOf0MXQK2NQOZJnTT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1hFtz%2FdJMb99TV9Hs%2F6tTyFOf0MXQK2NQOZJnTT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;182&quot; height=&quot;57&quot; data-origin-width=&quot;182&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역행렬을 구하기 위한 식은 위와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 행렬식 계산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;det(A)를 구해야 하나도.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 det(A) = 0이면 역행렬은 없는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 소행렬식 M_ij&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원소 a_ij 기준으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i행과 j열을 제거한 행렬의 행렬식을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 여인수 C_ij&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소행렬식에 부호를 붙인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;151&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KyFKR/dJMcahkbupl/yxsQIFsSl1ekNjOtKLg1F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KyFKR/dJMcahkbupl/yxsQIFsSl1ekNjOtKLg1F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KyFKR/dJMcahkbupl/yxsQIFsSl1ekNjOtKLg1F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKyFKR%2FdJMcahkbupl%2FyxsQIFsSl1ekNjOtKLg1F0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;151&quot; height=&quot;39&quot; data-origin-width=&quot;151&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부호 패턴은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;90&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nh7Z4/dJMcag6BnC3/rCb1gehYXXdbDrd4M9sNVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nh7Z4/dJMcag6BnC3/rCb1gehYXXdbDrd4M9sNVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nh7Z4/dJMcag6BnC3/rCb1gehYXXdbDrd4M9sNVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnh7Z4%2FdJMcag6BnC3%2FrCb1gehYXXdbDrd4M9sNVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;90&quot; height=&quot;69&quot; data-origin-width=&quot;90&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. Adjoint 행렬&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여인수 행렬을 전치하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;121&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D5Mwa/dJMcafs435A/IcK9lLDPuNwBO9xbE4EfI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D5Mwa/dJMcafs435A/IcK9lLDPuNwBO9xbE4EfI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D5Mwa/dJMcafs435A/IcK9lLDPuNwBO9xbE4EfI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD5Mwa%2FdJMcafs435A%2FIcK9lLDPuNwBO9xbE4EfI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;121&quot; height=&quot;34&quot; data-origin-width=&quot;121&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. 역행렬 계산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치한 adj(A)에 1/det(A)를 곱하면 역행렬을 만들 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;173&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IxTBu/dJMcajoDEIg/aMkM7wQI98sRBksOSYjd61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IxTBu/dJMcajoDEIg/aMkM7wQI98sRBksOSYjd61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IxTBu/dJMcajoDEIg/aMkM7wQI98sRBksOSYjd61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIxTBu%2FdJMcajoDEIg%2FaMkM7wQI98sRBksOSYjd61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;173&quot; height=&quot;52&quot; data-origin-width=&quot;173&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 정방행렬의 역행렬 (코드)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NumPy의 linalg.inv를 사용하면 정방행렬의 역행렬을 구할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbbj5e/dJMcadvcGi2/cdjQyHCn2dMQYKgaVdcI90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbbj5e/dJMcadvcGi2/cdjQyHCn2dMQYKgaVdcI90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbbj5e/dJMcadvcGi2/cdjQyHCn2dMQYKgaVdcI90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbbj5e%2FdJMcadvcGi2%2FcdjQyHCn2dMQYKgaVdcI90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;368&quot; height=&quot;227&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임의 행렬을 만들었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서 linalg.inv를 사용해 주면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WgO9T/dJMcad23Edl/gGpXYQTKlTG1qymu681E90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WgO9T/dJMcad23Edl/gGpXYQTKlTG1qymu681E90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WgO9T/dJMcad23Edl/gGpXYQTKlTG1qymu681E90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWgO9T%2FdJMcad23Edl%2FgGpXYQTKlTG1qymu681E90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;134&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역행렬을 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬 a와 역행렬 b를 서로 곱하면 단위행렬을 구할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W8d6n/dJMcah5xDV3/GiUzTr6KbsdRyRUZhM6HNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W8d6n/dJMcah5xDV3/GiUzTr6KbsdRyRUZhM6HNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W8d6n/dJMcah5xDV3/GiUzTr6KbsdRyRUZhM6HNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW8d6n%2FdJMcah5xDV3%2FGiUzTr6KbsdRyRUZhM6HNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;312&quot; height=&quot;223&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 대칭행렬&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치행렬이 자기 자신과 같은 행렬이면 대칭행렬이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;81&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ny3px/dJMcagldp7l/YywOrFgjEYV7zcP9YvFMUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ny3px/dJMcagldp7l/YywOrFgjEYV7zcP9YvFMUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ny3px/dJMcagldp7l/YywOrFgjEYV7zcP9YvFMUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fny3px%2FdJMcagldp7l%2FYywOrFgjEYV7zcP9YvFMUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;81&quot; height=&quot;37&quot; data-origin-width=&quot;81&quot; data-origin-height=&quot;37&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주대각선을 기준으로 값이 서로 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;139&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0NZwE/dJMcajvtIJQ/FOyZjKyfiwIeKbGcGDWhTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0NZwE/dJMcajvtIJQ/FOyZjKyfiwIeKbGcGDWhTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0NZwE/dJMcajvtIJQ/FOyZjKyfiwIeKbGcGDWhTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0NZwE%2FdJMcajvtIJQ%2FFOyZjKyfiwIeKbGcGDWhTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;139&quot; height=&quot;89&quot; data-origin-width=&quot;139&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;a_12 = 2, a_21 = 2&lt;/li&gt;
&lt;li&gt;a_13 = 3, a+31 = 3&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 전치행렬이 자신과 같게 된 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;74&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ5WeX/dJMcab5iduh/S31HFYel52q3EqXDHpqdU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ5WeX/dJMcab5iduh/S31HFYel52q3EqXDHpqdU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ5WeX/dJMcab5iduh/S31HFYel52q3EqXDHpqdU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ5WeX%2FdJMcab5iduh%2FS31HFYel52q3EqXDHpqdU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;74&quot; height=&quot;42&quot; data-origin-width=&quot;74&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 직교행렬&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전치행렬이 역행렬과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직교행렬의 열벡터나 행벡터는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 수직(직교)이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길이가 1인 단위벡터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 내적 = 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기 자신과 내적 = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 아래와 같은 행렬 A가 있다고 하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rCXkB/dJMcaaSRZkf/3KkTpM7bD4kcRFNfy5KYCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rCXkB/dJMcaaSRZkf/3KkTpM7bD4kcRFNfy5KYCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rCXkB/dJMcaaSRZkf/3KkTpM7bD4kcRFNfy5KYCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrCXkB%2FdJMcaaSRZkf%2F3KkTpM7bD4kcRFNfy5KYCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;124&quot; height=&quot;65&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 전치행렬을 하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bndSts/dJMcaakZ3gu/fNXCQkdtLSkpoQzFd2MrG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bndSts/dJMcaakZ3gu/fNXCQkdtLSkpoQzFd2MrG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bndSts/dJMcaakZ3gu/fNXCQkdtLSkpoQzFd2MrG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbndSts%2FdJMcaakZ3gu%2FfNXCQkdtLSkpoQzFd2MrG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;135&quot; height=&quot;58&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같이 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 곱하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;174&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGgPjL/dJMcagMkWY2/HgnVyh67Hg6wuynJx0CLi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGgPjL/dJMcagMkWY2/HgnVyh67Hg6wuynJx0CLi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGgPjL/dJMcagMkWY2/HgnVyh67Hg6wuynJx0CLi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGgPjL%2FdJMcagMkWY2%2FHgnVyh67Hg6wuynJx0CLi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;174&quot; height=&quot;72&quot; data-origin-width=&quot;174&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직교행렬이 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{6}. 유니 터리 행렬&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;81&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T1ZMV/dJMcaiXBf53/hK581f4hCrBKl0Y7xjxocK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T1ZMV/dJMcaiXBf53/hK581f4hCrBKl0Y7xjxocK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T1ZMV/dJMcaiXBf53/hK581f4hCrBKl0Y7xjxocK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT1ZMV%2FdJMcaiXBf53%2FhK581f4hCrBKl0Y7xjxocK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;81&quot; height=&quot;40&quot; data-origin-width=&quot;81&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 조건을 만족하면 유니터리 행렬이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;켤레전치&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전치&lt;/li&gt;
&lt;li&gt;복소수 켤레&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 동시에 한 것으로&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;112&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FG5vX/dJMcadvcGrv/I18zfFBTEQLGnmHIGZE1wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FG5vX/dJMcadvcGrv/I18zfFBTEQLGnmHIGZE1wK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FG5vX/dJMcadvcGrv/I18zfFBTEQLGnmHIGZE1wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFG5vX%2FdJMcadvcGrv%2FI18zfFBTEQLGnmHIGZE1wK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;112&quot; height=&quot;73&quot; data-origin-width=&quot;112&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 행렬 A를 전치하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;123&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c95ZSP/dJMcaayzA9d/8MJNlC4BsdmQO8VCVlGhlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c95ZSP/dJMcaayzA9d/8MJNlC4BsdmQO8VCVlGhlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c95ZSP/dJMcaayzA9d/8MJNlC4BsdmQO8VCVlGhlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc95ZSP%2FdJMcaayzA9d%2F8MJNlC4BsdmQO8VCVlGhlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;123&quot; height=&quot;68&quot; data-origin-width=&quot;123&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 허수만 -(마이너스)를 곱하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMAHov/dJMcag6BnTu/dHzHXXV6YuJpa4dfISnCmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMAHov/dJMcag6BnTu/dHzHXXV6YuJpa4dfISnCmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMAHov/dJMcag6BnTu/dHzHXXV6YuJpa4dfISnCmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMAHov%2FdJMcag6BnTu%2FdHzHXXV6YuJpa4dfISnCmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;135&quot; height=&quot;84&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;켤레전치를 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니터리 행렬은 직교행렬과 비슷하다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실수 행렬 &amp;rarr; 직교 행렬&lt;/li&gt;
&lt;li&gt;복소수 행렬 &amp;rarr; 유니터리 행렬&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;158&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccafrI/dJMcacJWeGa/Z1CcvrEoWaHkzOrADG8ld1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccafrI/dJMcacJWeGa/Z1CcvrEoWaHkzOrADG8ld1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccafrI/dJMcacJWeGa/Z1CcvrEoWaHkzOrADG8ld1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccafrI%2FdJMcacJWeGa%2FZ1CcvrEoWaHkzOrADG8ld1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;158&quot; height=&quot;66&quot; data-origin-width=&quot;158&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 행렬의 열벡터를 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 열벡터는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caK5Bu/dJMcaiJ4xXe/gkKvfp9JE6NIQmMEURSLmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caK5Bu/dJMcaiJ4xXe/gkKvfp9JE6NIQmMEURSLmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caK5Bu/dJMcaiJ4xXe/gkKvfp9JE6NIQmMEURSLmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaK5Bu%2FdJMcaiJ4xXe%2FgkKvfp9JE6NIQmMEURSLmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;124&quot; height=&quot;83&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 열벡터는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hfc2T/dJMcaaegKUT/NRg8GnpkxrPjqJ3XVmLI0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hfc2T/dJMcaaegKUT/NRg8GnpkxrPjqJ3XVmLI0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hfc2T/dJMcaaegKUT/NRg8GnpkxrPjqJ3XVmLI0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHfc2T%2FdJMcaaegKUT%2FNRg8GnpkxrPjqJ3XVmLI0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;124&quot; height=&quot;58&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 열 벡터를 각각 자기 자신과의 내적을 구하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BLkyO/dJMcabqIl48/lbm9KB9MsepcAOat7O7qv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BLkyO/dJMcabqIl48/lbm9KB9MsepcAOat7O7qv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BLkyO/dJMcabqIl48/lbm9KB9MsepcAOat7O7qv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBLkyO%2FdJMcabqIl48%2Flbm9KB9MsepcAOat7O7qv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;165&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 길이가 1인 것을 알 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 서로 다른 벡터의 내적을 구하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci356A/dJMcacQEDdC/dQ3iKB3tjP45mM9MF82mKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci356A/dJMcacQEDdC/dQ3iKB3tjP45mM9MF82mKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci356A/dJMcacQEDdC/dQ3iKB3tjP45mM9MF82mKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci356A%2FdJMcacQEDdC%2FdQ3iKB3tjP45mM9MF82mKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;266&quot; height=&quot;61&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 직교하는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열벡터들이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;길이는 1이고&lt;/li&gt;
&lt;li&gt;서로 직교이면&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx9XqX/dJMcaaegKU3/M7T9A73cphKBtRa184k7bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx9XqX/dJMcaaegKU3/M7T9A73cphKBtRa184k7bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx9XqX/dJMcaaegKU3/M7T9A73cphKBtRa184k7bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx9XqX%2FdJMcaaegKU3%2FM7T9A73cphKBtRa184k7bk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;168&quot; height=&quot;67&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니 터리 행렬이 되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. 벡터 노름과 거리함수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터의 &quot;크기&quot;또는 &quot;길이&quot;를 숫자 하나로 표현하는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3asdz/dJMcahLdK92/D7vWjBDXKA64kYfbHUkPT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3asdz/dJMcahLdK92/D7vWjBDXKA64kYfbHUkPT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3asdz/dJMcahLdK92/D7vWjBDXKA64kYfbHUkPT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3asdz%2FdJMcahLdK92%2FD7vWjBDXKA64kYfbHUkPT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;178&quot; height=&quot;82&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식은 Lp 노름의 일반식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p 값에 따라 다른 노름이 될 수도 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. L1 노름 (맨해튼 거리)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 성분의 절댓값을 모두 더한 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;36&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/laEIE/dJMcag6BnV4/ulRhWWcBNqLnwAxXNgQth1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/laEIE/dJMcag6BnV4/ulRhWWcBNqLnwAxXNgQth1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/laEIE/dJMcag6BnV4/ulRhWWcBNqLnwAxXNgQth1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlaEIE%2FdJMcag6BnV4%2FulRhWWcBNqLnwAxXNgQth1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;241&quot; height=&quot;36&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;36&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;격자로 이루어진 도시에서 블록을 돌아가듯 이동하는 거와 같다고 해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨해튼 거리, 도시 블록 거리 등 불리는 이름이 다양하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 L1은 Lasso 정규화에 쓰인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 가중치 중 중요하지 않은 것을 정확히 0으로 만들 어린 희소성 효과가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 불필요한 특징을 완전히 제거해 모델을 간결하게 만든다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. L2 노름 (유클리드 거리)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 성분을 제곱해서 더한 뒤 투트를 씌운 것이다. &amp;rArr; 직선거리와 같음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7I6A/dJMcagetvyY/e5QCoLWQ2gaK87RSpwsH7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7I6A/dJMcagetvyY/e5QCoLWQ2gaK87RSpwsH7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7I6A/dJMcagetvyY/e5QCoLWQ2gaK87RSpwsH7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7I6A%2FdJMcagetvyY%2Fe5QCoLWQ2gaK87RSpwsH7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;253&quot; height=&quot;58&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 L2는 Ridge 정규화(가중치 감쇠, Weight Decay)에 쓰인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치를 0 근처로 작게 유지시켜서 모델이 특정 특징에 과도하게 의존하지 않게 막는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L1처럼 완전히 0으로 만들지는 않고, 전체적으로 골고루 작게 줄이는 효과다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. L&amp;infin; 노름 (체비쇼프 거리)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성분들 중 절댓값이 가장 큰 값만 취함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etLCz4/dJMcad23Emg/Rv8RmoeVftCFXVuwCLSSFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etLCz4/dJMcad23Emg/Rv8RmoeVftCFXVuwCLSSFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etLCz4/dJMcad23Emg/Rv8RmoeVftCFXVuwCLSSFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FetLCz4%2FdJMcad23Emg%2FRv8RmoeVftCFXVuwCLSSFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;222&quot; height=&quot;56&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. L1, L2 비교&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WGEjM/dJMcagS5dLu/kucDKL3HnBgDPDBkqviXP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WGEjM/dJMcagS5dLu/kucDKL3HnBgDPDBkqviXP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WGEjM/dJMcagS5dLu/kucDKL3HnBgDPDBkqviXP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWGEjM%2FdJMcagS5dLu%2FkucDKL3HnBgDPDBkqviXP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;632&quot; height=&quot;336&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L1과 L2의 차이를 직관적으로 보면 위와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L1의 단위구는 마름모 형태라서, 정화 경로가 꼭짓점에서 만나기 쉽다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. *공분산 행렬 (Convariance Matrix)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 변수들 사이의 관계(분산 + 공분산)를 하나의 행렬로 정리한 것&lt;/li&gt;
&lt;li&gt;변수가 n개라면 n x n 정방행렬이 되고, 항상 대칭행렬이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bskouS/dJMcacpChB8/em1dhCv4eBKTEVC4zYn5I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bskouS/dJMcacpChB8/em1dhCv4eBKTEVC4zYn5I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bskouS/dJMcacpChB8/em1dhCv4eBKTEVC4zYn5I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbskouS%2FdJMcacpChB8%2Fem1dhCv4eBKTEVC4zYn5I0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;523&quot; height=&quot;170&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대각 성분 : 각 변수 자신의 분산&lt;/li&gt;
&lt;li&gt;비대각 성분 : 두 변수 사이의 공분산&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공분산이 양수면 두 변수가 같은 방향으로 움직이고, 음수면 반대 방향, 0이면 무관함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 공분산 행렬은 Batch Normalization, 데이터 화이트닝 등에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 분포를 파악하고, 정규화할 때 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 마할라노비스 거리과 PCA 계산의 핵심임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? Batch Normalization, 데이터 화이트닝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Batch Normalization&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습 중 각 레이어의 입력값을 미니배치 단위로 평균 0, 분산 1로 정규화함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 공장 컨베이어 벨트에서 제품 크기가 들쭉날쭉하면 기계가 오작동함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 이걸 정규화시켜서 일정한 범위로 만듦 = Batch Normalization&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 화이트닝&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터의 평균을 0, 분산을 1로 맞추고, 변수 간 상관관계까지 제거함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 학교 시험 점수가 수학은 평균 80점, 점수 범위가 70점에 몰림,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 영어는 평균 50점, 점수 범위는 60점에 몰렸다고 해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 두 과목의 스케일이 달라서 비교하기가 어렵다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 이걸 화이트닝 하면 평균 0, 분산 1로 동일한 기준으로 비교가 가능하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. 마할라노비스 거리 (Mahalanobis Distance)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유클리드 거리는 데이터 분포를 전혀 고려하지 않음&lt;/li&gt;
&lt;li&gt;마할라노비스 거 린느 공분산 행렬을 이용해 데이터의 분포까지 감안한 거리임&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vwcQ6/dJMcaaZBSFy/C3pJFdZVB8q1mlRxJI60P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vwcQ6/dJMcaaZBSFy/C3pJFdZVB8q1mlRxJI60P1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vwcQ6/dJMcaaZBSFy/C3pJFdZVB8q1mlRxJI60P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvwcQ6%2FdJMcaaZBSFy%2FC3pJFdZVB8q1mlRxJI60P1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;80&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;mu; : 데이터의 평균 벡터&lt;/li&gt;
&lt;li&gt;&amp;Sigma; : 공분산 행렬&lt;/li&gt;
&lt;li&gt;&amp;Sigma;&amp;minus;1 : 공분산 행렬의 역행렬 (분포를 보정해 줌)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키와 몸무게 데이터가 있을 때, 키는 퍼진 범위가 넓고 몸무게는 좁다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유클리드 거리로는 키 차이가 과도하게 반영됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마할라노비스 거리는 이 스케일 차이와 상관관계를 보정해서 공정하게 측정함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상치 탐지에 자주 쓰임. 새로운 데이터가 기존 분포에서 얼마나 멀리 떨어져 있는지 판단할 수 있기 때문이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. 쿨백-라이블러 발산 (KL Divergence)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 확률 분포 P와 Q가 얼마나 다른지를 측정하는 값&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RCENF/dJMcadBW0l0/upgDy4utEAfC10RK5Kksek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RCENF/dJMcadBW0l0/upgDy4utEAfC10RK5Kksek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RCENF/dJMcadBW0l0/upgDy4utEAfC10RK5Kksek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRCENF%2FdJMcadBW0l0%2FupgDy4utEAfC10RK5Kksek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;86&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;P를 기준으로 Q가 얼마나 다른가를 측정함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징으로는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비대칭&lt;/li&gt;
&lt;li&gt;KL 발산값은 항상 0 이상임&lt;/li&gt;
&lt;li&gt;P와 Q가 완전히 같으면 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 KL 발산은 두 군데서 자주 등장함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VAE(변이형 오토인코더)에서 인코더가 만들어낸 잠재 분포를 정규분포와 가깝게 유지시키기 위해 손실 함수 안에 KL 발산으로 포함시킴&lt;/li&gt;
&lt;li&gt;지식 증류에서 큰 교사 모델의 출력 분포와 작은 학생 모델의 출력 분포 차이를 KL 발산으로 측정하며 학습함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. 주성분 분석 (PCA, Principal Componect Analysis)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고차원 데이터를 저 차원으로 압축하는 기법&lt;/li&gt;
&lt;li&gt;데이터의 분산이 최대인 방향을 찾는 것이 핵심&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewgLVP/dJMcafs44t0/QXt9IIXd3hha56ln9z1BJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewgLVP/dJMcafs44t0/QXt9IIXd3hha56ln9z1BJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewgLVP/dJMcafs44t0/QXt9IIXd3hha56ln9z1BJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FewgLVP%2FdJMcafs44t0%2FQXt9IIXd3hha56ln9z1BJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;608&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA 절차&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;데이터를 평균 0으로 중심화함&lt;/li&gt;
&lt;li&gt;공분산 행렬 &amp;Sigma;를 계산&lt;/li&gt;
&lt;li&gt;&amp;Sigma;를 고윳값 분해함&lt;/li&gt;
&lt;li&gt;고윳값이 큰 순서대로 고유벡터를 고름 &amp;rarr; 이게 주성분&lt;/li&gt;
&lt;li&gt;원하는 차원 수만큼 주성분을 선택해 투영함&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNxy8/dJMcabYybI7/ElOxEolQuBTRjhQOr3XkhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNxy8/dJMcabYybI7/ElOxEolQuBTRjhQOr3XkhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNxy8/dJMcabYybI7/ElOxEolQuBTRjhQOr3XkhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNxy8%2FdJMcabYybI7%2FElOxEolQuBTRjhQOr3XkhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;188&quot; height=&quot;64&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q의 열벡터가 주성분(방향), A의 대각 성분이 각 방향의 분산(고윳값) 임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 PCA는 입력 데이터의 차원을 줄여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 속도를 높이거나 노이즈를 제거하거나 특징을 시각화할 때 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 얼굴 인식, 춴 시스템 등에서 직접 핵심 구성요소로 사용됨&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[7]. 특잇값 분해 (SVD, Singular Value Decomposition)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정방행렬에서만 쓸 수 있는 고윳값 분해와 달리&lt;/li&gt;
&lt;li&gt;임의의 m x n 행렬 A를 세 행렬의 곱으로 분해하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n88Qo/dJMb990Kr25/UjltsLY9eze5hvPJftfCik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n88Qo/dJMb990Kr25/UjltsLY9eze5hvPJftfCik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n88Qo/dJMb990Kr25/UjltsLY9eze5hvPJftfCik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn88Qo%2FdJMb990Kr25%2FUjltsLY9eze5hvPJftfCik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;676&quot; height=&quot;307&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;U : m x m 직교 행렬로 출력 공간의 기저 방향들이다&lt;/li&gt;
&lt;li&gt;&amp;Sigma; : m x n 대각행렬로 대각 성분이 특잇값(&amp;sigma;₁ &amp;ge; &amp;sigma;₂ &amp;ge; &amp;hellip; &amp;ge; 0)&lt;/li&gt;
&lt;li&gt;Vᵀ : n x n 직교행렬의 전치로 입력 공간의 기저 방향들이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특잇값(&amp;sigma;)이 클수록 그 방향이 중요하다는 뜻이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVD는 행 축소 SVD (Truncated SVD)로 압축에 쓰임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이값이 큰 k개만 남기고 나머지를 버리면 행렬을 근사적으로 표현하면서 용량을 크게 줄일 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhrtMm/dJMcacJWeTw/kK5t3suzrkk5OB7Mc8VY11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhrtMm/dJMcacJWeTw/kK5t3suzrkk5OB7Mc8VY11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhrtMm/dJMcacJWeTw/kK5t3suzrkk5OB7Mc8VY11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhrtMm%2FdJMcacJWeTw%2FkK5t3suzrkk5OB7Mc8VY11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;172&quot; height=&quot;64&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 압축, 추천 시스템의 행렬 분해, 자연어 처리의 LSA 등에 쓰이는 핵심 원리다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 SVD는 가중치 행렬의 Low-Rank Approximation에 쓰인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대형 언어 모델을 경량화하는 LoRA 기법도 이 아이디어에 기반함&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[8]. 무어-펜로즈 유사 역행렬 (Moore-Penrose Pseudoinverse)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정방행렬이 아니거나, 역행렬이 존재하지 않는 경우에 역행렬과 유사한 역할을 하는 행렬&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cryDLL/dJMcacb3Y3w/tfPUn2VGF7LnfxrJqaTaw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cryDLL/dJMcacb3Y3w/tfPUn2VGF7LnfxrJqaTaw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cryDLL/dJMcacb3Y3w/tfPUn2VGF7LnfxrJqaTaw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcryDLL%2FdJMcacb3Y3w%2FtfPUn2VGF7LnfxrJqaTaw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;198&quot; height=&quot;54&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;Sigma;+는 &amp;Sigma;의 0이 아닌 대각 성분을 역수로 바꾸고, 행/열 구조를 전치시킨 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1bqo/dJMcacb3Y3C/belPWC8kf7mU3kRgk1VtDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1bqo/dJMcacb3Y3C/belPWC8kf7mU3kRgk1VtDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1bqo/dJMcacb3Y3C/belPWC8kf7mU3kRgk1VtDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1bqo%2FdJMcacb3Y3C%2FbelPWC8kf7mU3kRgk1VtDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;689&quot; height=&quot;152&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0인 특잇값은 그대로 0으로 둠. 역수를 취하면 무한대가 되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사 역행렬은 다음 성질을 만족함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AA^+A = A&lt;/li&gt;
&lt;li&gt;A^+AA^+ = A^+&lt;/li&gt;
&lt;li&gt;(AA^+)^T = AA^+&lt;/li&gt;
&lt;li&gt;(A^+A)^T = A^+A&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 네 조건을 무어-펜로즈 조건이라 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사 역행렬이 가장 많이 쓰이는 곳은 최소 제곱법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방정식 Ax = b에서 해가 없거나 무한히 많을 때, 유사 역행렬을 사용해 최선의 근사해를 구한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4IbvL/dJMcaf7FrKh/MknOCKKpnObspNPi4HIG2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4IbvL/dJMcaf7FrKh/MknOCKKpnObspNPi4HIG2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4IbvL/dJMcaf7FrKh/MknOCKKpnObspNPi4HIG2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4IbvL%2FdJMcaf7FrKh%2FMknOCKKpnObspNPi4HIG2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;135&quot; height=&quot;61&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Overdetermined (m &amp;gt; n) : 오차가 가장 작은 최소 제곱해&lt;/li&gt;
&lt;li&gt;Underdetermined (m &amp;lt; n) : 오차가 0이면서 노름이 가장 작은 해&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝에서 선형 레이어의 가중치 초기화, *그래디언트 계산이 불안정할 때의 보완,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형 회귀 모델의 정규 방정식 풀이에 쓰임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? 그래디언트 계산&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4rOCP/dJMcahkbuMz/NMFMhkYeUHiKti6i3VY7P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4rOCP/dJMcahkbuMz/NMFMhkYeUHiKti6i3VY7P1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4rOCP/dJMcahkbuMz/NMFMhkYeUHiKti6i3VY7P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4rOCP%2FdJMcahkbuMz%2FNMFMhkYeUHiKti6i3VY7P1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;381&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;표 정리&lt;/h2&gt;
&lt;table id=&quot;3550ee22-aed1-8152-ab35-c038f3b7630a&quot; style=&quot;border-collapse: collapse; width: 66.7442%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;3550ee22-aed1-81d2-ac4b-df1444e6f30e&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;개념&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;핵심 역할&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;딥러닝 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-8102-8fda-f8874f4d1c49&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;L1 노름&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;희소성 유도&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;Lasso 정규화, 희소 특징 선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-815c-90b6-fbea0140d439&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;L2 노름&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;균등 수축&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;Ridge 정규화, Weight Decay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-813b-a9ce-fa11064a0627&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;공분산 행렬&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;변수 간 관계&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;Batch Normalization, 데이터 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-81f0-ba04-f0b5d60f0822&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;마할라노비스 거리&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;분포 보정 거리&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;이상치 탐지, 거리 학습&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-81ed-ad61-e50ba4f060a2&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;KL 발산&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;분포 차이 측정&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;VAE, 지식 증류&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-8132-92ea-ceeb4be6fd7c&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;PCA&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;차원 축소&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;특징 압축, 시각화, 노이즈 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-814a-bee6-e5d7bfeda381&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;SVD&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;행렬 분해&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;추천 시스템, 이미지 압축, LoRA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-81b5-89b3-d4ddccaf5436&quot;&gt;
&lt;td id=&quot;XwZ;&quot; style=&quot;width: 18.0233%;&quot;&gt;유사 역행렬&lt;/td&gt;
&lt;td id=&quot;gJdY&quot; style=&quot;width: 17.093%;&quot;&gt;역행렬 대체&lt;/td&gt;
&lt;td id=&quot;luu^&quot; style=&quot;width: 31.5116%;&quot;&gt;최소 제곱 풀이, 선형 회귀&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[?]. 궁금한 점&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{1}. 왜 미래의 단어를 커닝하지 못하게 막아야 하나?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 딥러닝의 목적은 예측이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;나는 학교에 [?]라는 문장이 있을 때&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델은 앞의 단어들만 보고 '간다'를 추론해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;근데 모델이 미래의 단어 '간다'를 미리 볼 수 있다면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델은 추론하는 법을 배우는 대신 정답을 베껴서 맞히게 되는 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 병렬 연산과 마스크의 필용성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;통째로 계산하는 효율성 현대 LLM은 단어를 하나씩 입력받지 않고,&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문장 전체를 입력받아 병렬 계산함으로써 GPU 연산 효율을 극대화한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;눈가림의 모순 해결 데이터를 한 번에 주면서도 미래 단어는 보지 못하게 해야 하는 모순이 생긴다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;계산 과정에서 특정 영역을 물리적으로 차단하는 어텐션 마스크로 해결할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 상/하삼각 행렬&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상삼각행렬 : 마스크 (가리는 영역) 주대각선 기준 오른쪽 위 영역으로, 미래 단어가 위치한 자리다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 영역에 마스크를 씌워 값을 전부&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;minus;&lt;/span&gt;&lt;span&gt;&amp;infin;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;로 날린 뒤, Softmax를 거치면&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;minus;&lt;/span&gt;&lt;span&gt;&amp;infin;에서&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;0이 되어 해당 위치의 정보가 완전히 차단된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하삼각행렬 : 결과물 (살아남는 영역) 주대각선 기준 왼쪽 아래 영역으로, 상삼각행렬이 가리고 남은 자리다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;마스크의 영향을 받지 않아 실제 어텐션 값이 그대로 유지되며, 모델은 이 영역만을 참고해 연산을 수행한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{2}. ResNet&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;딥러닝에서 매우 깊은 *CNN을 학습할 수 있도록 만든 신경망 구조&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2015년 Kaiming He 등이 발표한&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Deep Residual Learning for Image Recognition에서 제안된 내용이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;? CNN (학성곱 신경망)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미지와 영상 등 시각적 데이터를 분석한 데 특화된 딥러닝 알고리즘&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(1). 기존 문제점&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;레이어가 깊어질수록&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습이 어렵고,&lt;/li&gt;
&lt;li&gt;정확도가 오히려 떨어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;20-layer CNN = 정확도 높음&lt;/li&gt;
&lt;li&gt;100-layer CNN = 정확도 낮음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Overfitting 문제가 아닌 학습 자체가 어려워져서 정확도가 낮아진 것이다.&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(2). ResNet의 아이디어&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ResNet은 *Skip Connection을 도입했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;*Skip Connection&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;딥러닝에서 사용되는 네트워크 구조 중 하나&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;입력 데이터가 네트워크의 여러 레이어를 건너뛰어&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;출력 레이어에 직접 연결되는 방식&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그니까&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존 CNN은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;x &amp;rarr; layer1 &amp;rarr; layer2 &amp;rarr; layer3 &amp;rarr;.. &amp;rarr; output&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 순서대로 진행했다면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ResNet은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;x ─────────┐&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;darr;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;x &amp;rarr; layer1 &amp;rarr; layer2 &amp;rarr;... &amp;rarr; ouput&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;구조로 입력값 x를 건너뛰어서 뒤로 전달하는 구조이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(3). Residual Learning&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ResNet은 출력을 직접 학습하지 않는다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;*잔차(residual)를 학습한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또한&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델 학습 초기에 가중치 행렬을 항등행렬에 가깝게 설정하여&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;입력값이 변형되지 않고 층을 통과하게 유도함으로써&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기울기 소실 문제를 방지하기도 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반 CNN은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;H(x)를 학습하지만&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ResNet은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;H(x) = F(x) + x&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x : 입력&lt;/li&gt;
&lt;li&gt;F(x) : residual 함수&lt;/li&gt;
&lt;li&gt;H(x) : 최종 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;= F(x) = H(x) - x&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;을 학습하는 구조로 학습을 쉽게 만든다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;? 잔차&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실제 값에서 추정 값을 뺸 값&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;입력값과 출력값의 차이&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;y = f(x) + x&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 x를 넣으면 연산을 거쳐 새로운 출력 y = f(x)를 만드들려고함&lt;/li&gt;
&lt;li&gt;잔차 연결은 모델이 입력 x를 얼마나 변화시킬 것인가에 집중&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수식에서 f(x)가 잔차이다.&lt;/li&gt;
&lt;li&gt;모델은 입력값 x를 정답으로 만들기 위해&lt;/li&gt;
&lt;li&gt;더하거나 빼야 할 나머지만 학습하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 왜 씀?&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;딥러닝 층이 깊어지면 깊어질수록,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;학습을 위한 데이터 신호(기울기)가 뒤로 갈수록,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사라지는 기울기 소실 문제가 발생&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;잔차를 이용하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연결은 입력 x를 연산 없이 다음 층으로 바로 전달하는 지름길 역할을 해주고,&lt;/li&gt;
&lt;li&gt;층이 깊어져도 지름길 때문에 최소한 입력값 x만큼의 정보는 끝까지 전달된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;= 그래서 1000층 1000000층이어도 안정적으로 학습할 수 있게 된다.&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{3}. 공분산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 변수가 함께 얼마나 변하는지를 나타내는 값&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키가 클수록 몸무게도 많이 나가는 경향이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 두 변수가 &amp;ldquo;같은 방향&amp;rdquo;으로 움직임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 공분산 (+)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부시간이 길수록 게임시간이 줄어듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 두 변수가 &amp;ldquo;반대 방향&amp;rdquo;으로 움직임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 공분산 (-)&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(1). 수식&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JetPT/dJMcagetvFP/s2EqL7JYEeFGDcTObXM9uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JetPT/dJMcagetvFP/s2EqL7JYEeFGDcTObXM9uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JetPT/dJMcagetvFP/s2EqL7JYEeFGDcTObXM9uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJetPT%2FdJMcagetvFP%2Fs2EqL7JYEeFGDcTObXM9uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;497&quot; height=&quot;90&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table id=&quot;3550ee22-aed1-81bf-ba4c-c06b8879b831&quot; style=&quot;border-collapse: collapse; width: 41.9767%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;3550ee22-aed1-810a-bd85-c4e104c09952&quot;&gt;
&lt;td id=&quot;HUVu&quot; style=&quot;width: 13.6047%;&quot;&gt;항&lt;/td&gt;
&lt;td id=&quot;I\Ej&quot; style=&quot;width: 28.2558%;&quot;&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-8115-9d75-c47eb97e247c&quot;&gt;
&lt;td id=&quot;HUVu&quot; style=&quot;width: 13.6047%;&quot;&gt;Xi&amp;minus;Xˉ&lt;/td&gt;
&lt;td id=&quot;I\Ej&quot; style=&quot;width: 28.2558%;&quot;&gt;X가 평균에서 얼마나 벗어났는지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-8163-b1b5-c9eb2f8d86e4&quot;&gt;
&lt;td id=&quot;HUVu&quot; style=&quot;width: 13.6047%;&quot;&gt;Yi&amp;minus;Yˉ&lt;/td&gt;
&lt;td id=&quot;I\Ej&quot; style=&quot;width: 28.2558%;&quot;&gt;Y가 평균에서 얼마나 벗어낫는지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3550ee22-aed1-8141-9331-fcbe54ceebe7&quot;&gt;
&lt;td id=&quot;HUVu&quot; style=&quot;width: 13.6047%;&quot;&gt;둘을 곱함&lt;/td&gt;
&lt;td id=&quot;I\Ej&quot; style=&quot;width: 28.2558%;&quot;&gt;같은 방향이면(+), 반대 방향(-)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(2). 단점&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;크기 비교가 어려움&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공분산이 500이면 관계가 강한 건지 약한 건지 알 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 이걸 해결하기 위해 상관계수 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYd8Og/dJMcajvtI4w/YRr9ickTopkxea9zOeKJC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYd8Og/dJMcajvtI4w/YRr9ickTopkxea9zOeKJC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYd8Og/dJMcajvtI4w/YRr9ickTopkxea9zOeKJC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYd8Og%2FdJMcajvtI4w%2FYRr9ickTopkxea9zOeKJC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;96&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공분산을 -1~1 사이로 정규화한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출처 :&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mvje.tistory.com/80&quot;&gt;https://mvje.tistory.com/80&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895199071&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AI/ML] 딥러닝 정규화 Regularization : Weight Decay, Batch Normalization, Early Stopping&quot; data-og-description=&quot;딥러닝 모델은 대규모 데이터셋과 복잡한 신경망 구조를 사용하여 높은 예측 성능을 달성할 수 있다. 하지만 모델이 학습 데이터에 지나치게 맞춰져서 새로운 데이터에 대한 일반화 능력이 떨&quot; data-og-host=&quot;mvje.tistory.com&quot; data-og-source-url=&quot;https://mvje.tistory.com/80&quot; data-og-url=&quot;https://mvje.tistory.com/80&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oPtGs/dJMb8WMuNxY/NP232Hd6p7K7lqpcMvn2jk/img.png?width=501&amp;amp;height=259&amp;amp;face=0_0_501_259,https://scrap.kakaocdn.net/dn/ruzjH/dJMb8QerlK9/n6GhP7Q0k7ZCK3QkfDk021/img.png?width=501&amp;amp;height=259&amp;amp;face=0_0_501_259,https://scrap.kakaocdn.net/dn/cNR4Oa/dJMb8WeETYs/9KJ7XXIKAkVxqKjMgpPqe0/img.png?width=501&amp;amp;height=259&amp;amp;face=0_0_501_259&quot;&gt;&lt;a href=&quot;https://mvje.tistory.com/80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mvje.tistory.com/80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oPtGs/dJMb8WMuNxY/NP232Hd6p7K7lqpcMvn2jk/img.png?width=501&amp;amp;height=259&amp;amp;face=0_0_501_259,https://scrap.kakaocdn.net/dn/ruzjH/dJMb8QerlK9/n6GhP7Q0k7ZCK3QkfDk021/img.png?width=501&amp;amp;height=259&amp;amp;face=0_0_501_259,https://scrap.kakaocdn.net/dn/cNR4Oa/dJMb8WeETYs/9KJ7XXIKAkVxqKjMgpPqe0/img.png?width=501&amp;amp;height=259&amp;amp;face=0_0_501_259');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[AI/ML] 딥러닝 정규화 Regularization : Weight Decay, Batch Normalization, Early Stopping&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;딥러닝 모델은 대규모 데이터셋과 복잡한 신경망 구조를 사용하여 높은 예측 성능을 달성할 수 있다. 하지만 모델이 학습 데이터에 지나치게 맞춰져서 새로운 데이터에 대한 일반화 능력이 떨&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mvje.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://modulabs.co.kr/blog/loss-function-machinelearning&quot;&gt;https://modulabs.co.kr/blog/loss-function-machinelearning&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895201318&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;손실함수 (Loss Function)&quot; data-og-description=&quot;머신러닝과 딥러닝에서 아주 중요한 개념 중 하나인 손실함수에 대해 이야기해보려고 합니다. 손실함수는 모델의 학습을 이끄는 나침반과 같은 역할을 합니다. 이번 글에서는 손실함수가 무엇&quot; data-og-host=&quot;modulabs.co.kr&quot; data-og-source-url=&quot;https://modulabs.co.kr/blog/loss-function-machinelearning&quot; data-og-url=&quot;https://modulabs.co.kr/blog/loss-function-machinelearning&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ye1sj/dJMb8QMheSL/oTnOqx98XYdfT34Dyrdj9K/img.png?width=1545&amp;amp;height=811&amp;amp;face=0_0_1545_811,https://scrap.kakaocdn.net/dn/zMi8F/dJMb9bv7pog/vzAFllz3UZiM1kOdz70cSk/img.png?width=1545&amp;amp;height=811&amp;amp;face=0_0_1545_811,https://scrap.kakaocdn.net/dn/rjvyX/dJMb9kmhPXv/p3HZ1iDKOuQxQf9PECTxm0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://modulabs.co.kr/blog/loss-function-machinelearning&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://modulabs.co.kr/blog/loss-function-machinelearning&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ye1sj/dJMb8QMheSL/oTnOqx98XYdfT34Dyrdj9K/img.png?width=1545&amp;amp;height=811&amp;amp;face=0_0_1545_811,https://scrap.kakaocdn.net/dn/zMi8F/dJMb9bv7pog/vzAFllz3UZiM1kOdz70cSk/img.png?width=1545&amp;amp;height=811&amp;amp;face=0_0_1545_811,https://scrap.kakaocdn.net/dn/rjvyX/dJMb9kmhPXv/p3HZ1iDKOuQxQf9PECTxm0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;손실함수 (Loss Function)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;머신러닝과 딥러닝에서 아주 중요한 개념 중 하나인 손실함수에 대해 이야기해보려고 합니다. 손실함수는 모델의 학습을 이끄는 나침반과 같은 역할을 합니다. 이번 글에서는 손실함수가 무엇&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;modulabs.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://hsm-edu.tistory.com/1266&quot;&gt;https://hsm-edu.tistory.com/1266&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778894701779&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;공분산이란 무엇인가 (정의와 의미)&quot; data-og-description=&quot;역사적 정황을 정확히 알 수는 없지만 공분산은 분산에서 유래된 개념인 것 같습니다. 분산을 먼저 발견하고, 이후에 공분산을 떠올린 것입니다. 공분산은 공+분산인데, 여기서 공은 함께, 여럿&quot; data-og-host=&quot;hsm-edu.tistory.com&quot; data-og-source-url=&quot;https://hsm-edu.tistory.com/1266&quot; data-og-url=&quot;https://hsm-edu.tistory.com/1266&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jgdTM/dJMb81G2zuS/49lmRtAXmu2FVBTXxfi6I0/img.png?width=800&amp;amp;height=609&amp;amp;face=0_0_800_609,https://scrap.kakaocdn.net/dn/biUrIV/dJMb8958OR7/V2y3blT6vmXWocyC3FKWF1/img.png?width=800&amp;amp;height=609&amp;amp;face=0_0_800_609,https://scrap.kakaocdn.net/dn/IeJOQ/dJMb9aKKe5U/KOXkKaMtIS5cpvXbqaEVRK/img.png?width=863&amp;amp;height=730&amp;amp;face=0_0_863_730&quot;&gt;&lt;a href=&quot;https://hsm-edu.tistory.com/1266&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hsm-edu.tistory.com/1266&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jgdTM/dJMb81G2zuS/49lmRtAXmu2FVBTXxfi6I0/img.png?width=800&amp;amp;height=609&amp;amp;face=0_0_800_609,https://scrap.kakaocdn.net/dn/biUrIV/dJMb8958OR7/V2y3blT6vmXWocyC3FKWF1/img.png?width=800&amp;amp;height=609&amp;amp;face=0_0_800_609,https://scrap.kakaocdn.net/dn/IeJOQ/dJMb9aKKe5U/KOXkKaMtIS5cpvXbqaEVRK/img.png?width=863&amp;amp;height=730&amp;amp;face=0_0_863_730');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;공분산이란 무엇인가 (정의와 의미)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;역사적 정황을 정확히 알 수는 없지만 공분산은 분산에서 유래된 개념인 것 같습니다. 분산을 먼저 발견하고, 이후에 공분산을 떠올린 것입니다. 공분산은 공+분산인데, 여기서 공은 함께, 여럿&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hsm-edu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@kgj9818/선형대수학-행렬3-정방행렬-및-행렬의-종류&quot;&gt;https://velog.io/@kgj9818/선형대수학-행렬3-정방행렬-및-행렬의-종류&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895152995&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[선형대수학] 행렬(3) - 정방행렬 및 행렬의 종류&quot; data-og-description=&quot;이번 포스팅은 정방행렬(Square matrix)에 대해 다뤄보겠습니다.&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@kgj9818/선형대수학-행렬3-정방행렬-및-행렬의-종류&quot; data-og-url=&quot;https://velog.io/@kgj9818/선형대수학-행렬3-정방행렬-및-행렬의-종류&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buuT6s/dJMb88e5SB6/mQ7qV7cVAa6WnC87EPndo1/img.png?width=692&amp;amp;height=222&amp;amp;face=0_0_692_222,https://scrap.kakaocdn.net/dn/faVF7/dJMb9llchTd/AkGIt22HNAMvv6HFHe5JE1/img.png?width=692&amp;amp;height=222&amp;amp;face=0_0_692_222,https://scrap.kakaocdn.net/dn/drQ5KA/dJMb83Sn8ep/hSVc5z9dc8qIMxOhRGlLrK/img.png?width=692&amp;amp;height=222&amp;amp;face=0_0_692_222&quot;&gt;&lt;a href=&quot;https://velog.io/@kgj9818/선형대수학-행렬3-정방행렬-및-행렬의-종류&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@kgj9818/선형대수학-행렬3-정방행렬-및-행렬의-종류&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buuT6s/dJMb88e5SB6/mQ7qV7cVAa6WnC87EPndo1/img.png?width=692&amp;amp;height=222&amp;amp;face=0_0_692_222,https://scrap.kakaocdn.net/dn/faVF7/dJMb9llchTd/AkGIt22HNAMvv6HFHe5JE1/img.png?width=692&amp;amp;height=222&amp;amp;face=0_0_692_222,https://scrap.kakaocdn.net/dn/drQ5KA/dJMb83Sn8ep/hSVc5z9dc8qIMxOhRGlLrK/img.png?width=692&amp;amp;height=222&amp;amp;face=0_0_692_222');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[선형대수학] 행렬(3) - 정방행렬 및 행렬의 종류&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 포스팅은 정방행렬(Square matrix)에 대해 다뤄보겠습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://stevenkim1217.tistory.com/entry/ResNet-개념-정리&quot;&gt;https://stevenkim1217.tistory.com/entry/ResNet-개념-정리&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895153321&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[논문정리] ResNet 개념 정리&quot; data-og-description=&quot;*본 내용은 논문의 상세한 분석이 아닌, 간단한 복기용 정리입니다. Residual Learning ResNet의 핵심인 Residual Learning입니다. 기존 방식은 input으로 x를 받아서 두개의 weight layer을 거치고, 학습을 통해 &quot; data-og-host=&quot;stevenkim1217.tistory.com&quot; data-og-source-url=&quot;https://stevenkim1217.tistory.com/entry/ResNet-개념-정리&quot; data-og-url=&quot;https://stevenkim1217.tistory.com/entry/ResNet-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/maJUP/dJMb8Z3wyBX/5buoqkmpGatWzhU8pOcKqK/img.png?width=800&amp;amp;height=353&amp;amp;face=0_0_800_353,https://scrap.kakaocdn.net/dn/vPQjy/dJMb86O6V7Q/ioJZNTBlpcbKGD1ILQQXBk/img.png?width=800&amp;amp;height=353&amp;amp;face=0_0_800_353,https://scrap.kakaocdn.net/dn/bcHIi5/dJMb8TCeTvU/tK6blcDmL4mks2CLYFypCk/img.png?width=2122&amp;amp;height=938&amp;amp;face=0_0_2122_938&quot;&gt;&lt;a href=&quot;https://stevenkim1217.tistory.com/entry/ResNet-개념-정리&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stevenkim1217.tistory.com/entry/ResNet-개념-정리&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/maJUP/dJMb8Z3wyBX/5buoqkmpGatWzhU8pOcKqK/img.png?width=800&amp;amp;height=353&amp;amp;face=0_0_800_353,https://scrap.kakaocdn.net/dn/vPQjy/dJMb86O6V7Q/ioJZNTBlpcbKGD1ILQQXBk/img.png?width=800&amp;amp;height=353&amp;amp;face=0_0_800_353,https://scrap.kakaocdn.net/dn/bcHIi5/dJMb8TCeTvU/tK6blcDmL4mks2CLYFypCk/img.png?width=2122&amp;amp;height=938&amp;amp;face=0_0_2122_938');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[논문정리] ResNet 개념 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;*본 내용은 논문의 상세한 분석이 아닌, 간단한 복기용 정리입니다. Residual Learning ResNet의 핵심인 Residual Learning입니다. 기존 방식은 input으로 x를 받아서 두개의 weight layer을 거치고, 학습을 통해&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stevenkim1217.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://wikidocs.net/202621&quot;&gt;https://wikidocs.net/202621&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895157692&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Skip Connection (스킵 연결)&quot; data-og-description=&quot;### 정의 Skip Connection이란 딥러닝에서 사용되는 네트워크 구조 중 하나이다. 이는 입력 데이터가 네트워크의 여러 레이어를 건너뛰어 출력 레이어에 직접 연결되는 방&amp;hellip;&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/202621&quot; data-og-url=&quot;https://wikidocs.net/202621&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dAta8T/dJMb83Sn8ev/wFdBKJqhkti4wljiC62r21/img.png?width=305&amp;amp;height=397&amp;amp;face=0_0_305_397&quot;&gt;&lt;a href=&quot;https://wikidocs.net/202621&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/202621&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dAta8T/dJMb83Sn8ev/wFdBKJqhkti4wljiC62r21/img.png?width=305&amp;amp;height=397&amp;amp;face=0_0_305_397');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Skip Connection (스킵 연결)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;### 정의 Skip Connection이란 딥러닝에서 사용되는 네트워크 구조 중 하나이다. 이는 입력 데이터가 네트워크의 여러 레이어를 건너뛰어 출력 레이어에 직접 연결되는 방&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://jangpiano-science.tistory.com/116&quot;&gt;https://jangpiano-science.tistory.com/116&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895167470&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[회귀]오차와 잔차, 표준화 잔차&quot; data-og-description=&quot;오차와 잔차는 표기방식부터, 해석, 조건까지 정확하게 다른 값입니다. 오차(error)는 모집단(population)으로부터 추정한 회귀식으로부터 얻은 예측값과 실제 관측값의 차이를 이야기 합니다. 여기&quot; data-og-host=&quot;jangpiano-science.tistory.com&quot; data-og-source-url=&quot;https://jangpiano-science.tistory.com/116&quot; data-og-url=&quot;https://jangpiano-science.tistory.com/116&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bS9CgI/dJMb9lMgDTv/mpXUuI8xIx4zdKIhut9KE1/img.png?width=318&amp;amp;height=458&amp;amp;face=0_0_318_458,https://scrap.kakaocdn.net/dn/yhBNX/dJMb8XSaWRR/LkcMKaoi1iKb5MgdU58Zkk/img.png?width=318&amp;amp;height=458&amp;amp;face=0_0_318_458,https://scrap.kakaocdn.net/dn/Ta7cg/dJMb9lMgDTw/IWg3mT58Uc74e5mk9XxDf0/img.png?width=318&amp;amp;height=458&amp;amp;face=0_0_318_458&quot;&gt;&lt;a href=&quot;https://jangpiano-science.tistory.com/116&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jangpiano-science.tistory.com/116&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bS9CgI/dJMb9lMgDTv/mpXUuI8xIx4zdKIhut9KE1/img.png?width=318&amp;amp;height=458&amp;amp;face=0_0_318_458,https://scrap.kakaocdn.net/dn/yhBNX/dJMb8XSaWRR/LkcMKaoi1iKb5MgdU58Zkk/img.png?width=318&amp;amp;height=458&amp;amp;face=0_0_318_458,https://scrap.kakaocdn.net/dn/Ta7cg/dJMb9lMgDTw/IWg3mT58Uc74e5mk9XxDf0/img.png?width=318&amp;amp;height=458&amp;amp;face=0_0_318_458');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[회귀]오차와 잔차, 표준화 잔차&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오차와 잔차는 표기방식부터, 해석, 조건까지 정확하게 다른 값입니다. 오차(error)는 모집단(population)으로부터 추정한 회귀식으로부터 얻은 예측값과 실제 관측값의 차이를 이야기 합니다. 여기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jangpiano-science.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://study2give.tistory.com/entry/선형대수학-역행렬Inverse-matrix&quot;&gt;https://study2give.tistory.com/entry/선형대수학-역행렬 Inverse-matrix&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895171872&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[선형대수학] 역행렬(Inverse matrix)&quot; data-og-description=&quot;이번 포스팅에서는 역행렬에 대해 다뤄보겠습니다. 역행렬(Inverse matrix)이란? $n$ x $n$행렬 $A$에 대하여, 곱하여 단위행렬이 나오게하는 행렬을 행렬 $A$의 역행렬이라 하며, 식으로 나타내면 아래&quot; data-og-host=&quot;study2give.tistory.com&quot; data-og-source-url=&quot;https://study2give.tistory.com/entry/선형대수학-역행렬Inverse-matrix&quot; data-og-url=&quot;https://study2give.tistory.com/entry/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99-%EC%97%AD%ED%96%89%EB%A0%ACInverse-matrix&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bt6aBG/dJMb9llchTj/6om3OqkijvKwNQjKm5exr1/img.png?width=308&amp;amp;height=128&amp;amp;face=0_0_308_128,https://scrap.kakaocdn.net/dn/SV7dC/dJMb9gxqBjy/b96fbjKHfQQrkFtioix4l1/img.png?width=308&amp;amp;height=128&amp;amp;face=0_0_308_128,https://scrap.kakaocdn.net/dn/cVOdB8/dJMb9efi81o/Rxawd9teGecjFim6SFH3N1/img.jpg?width=1920&amp;amp;height=1281&amp;amp;face=0_0_1920_1281&quot;&gt;&lt;a href=&quot;https://study2give.tistory.com/entry/선형대수학-역행렬Inverse-matrix&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://study2give.tistory.com/entry/선형대수학-역행렬Inverse-matrix&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bt6aBG/dJMb9llchTj/6om3OqkijvKwNQjKm5exr1/img.png?width=308&amp;amp;height=128&amp;amp;face=0_0_308_128,https://scrap.kakaocdn.net/dn/SV7dC/dJMb9gxqBjy/b96fbjKHfQQrkFtioix4l1/img.png?width=308&amp;amp;height=128&amp;amp;face=0_0_308_128,https://scrap.kakaocdn.net/dn/cVOdB8/dJMb9efi81o/Rxawd9teGecjFim6SFH3N1/img.jpg?width=1920&amp;amp;height=1281&amp;amp;face=0_0_1920_1281');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[선형대수학] 역행렬(Inverse matrix)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 역행렬에 대해 다뤄보겠습니다. 역행렬(Inverse matrix)이란? $n$ x $n$행렬 $A$에 대하여, 곱하여 단위행렬이 나오게하는 행렬을 행렬 $A$의 역행렬이라 하며, 식으로 나타내면 아래&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;study2give.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://portrait-of-youngblood.tistory.com/12&quot;&gt;https://portrait-of-youngblood.tistory.com/12&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1778895171774&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;7. 수반행렬과 여인수 전개 (Adjoint Matrix and Minor Expansion)&quot; data-og-description=&quot;오늘은 행렬식을 구하는 또다른 방법인 &amp;quot;여인수 전개&amp;quot;에 대해 알아보자 여인수 전개에 대해 배우기 전에 여러가지 정의들을 알고 넘어가야 한다. 소행렬식, 여인수, 수반행렬의 개념이 처음 등&quot; data-og-host=&quot;portrait-of-youngblood.tistory.com&quot; data-og-source-url=&quot;https://portrait-of-youngblood.tistory.com/12&quot; data-og-url=&quot;https://portrait-of-youngblood.tistory.com/12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/efuzoD/dJMb8U8YN5R/Fo536FnPSwTxvzXmIGZkfk/img.png?width=800&amp;amp;height=1051&amp;amp;face=0_0_800_1051,https://scrap.kakaocdn.net/dn/6bmAx/dJMb8VNAHUp/693ApgkuJa3r2owO5HI0t1/img.png?width=800&amp;amp;height=1051&amp;amp;face=0_0_800_1051,https://scrap.kakaocdn.net/dn/cEgUaj/dJMb9iaWigo/TN9zhLmLjrQnfyNhf1VOMK/img.png?width=934&amp;amp;height=1228&amp;amp;face=0_0_934_1228&quot;&gt;&lt;a href=&quot;https://portrait-of-youngblood.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://portrait-of-youngblood.tistory.com/12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/efuzoD/dJMb8U8YN5R/Fo536FnPSwTxvzXmIGZkfk/img.png?width=800&amp;amp;height=1051&amp;amp;face=0_0_800_1051,https://scrap.kakaocdn.net/dn/6bmAx/dJMb8VNAHUp/693ApgkuJa3r2owO5HI0t1/img.png?width=800&amp;amp;height=1051&amp;amp;face=0_0_800_1051,https://scrap.kakaocdn.net/dn/cEgUaj/dJMb9iaWigo/TN9zhLmLjrQnfyNhf1VOMK/img.png?width=934&amp;amp;height=1228&amp;amp;face=0_0_934_1228');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;7. 수반행렬과 여인수 전개 (Adjoint Matrix and Minor Expansion)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 행렬식을 구하는 또다른 방법인 &quot;여인수 전개&quot;에 대해 알아보자 여인수 전개에 대해 배우기 전에 여러가지 정의들을 알고 넘어가야 한다. 소행렬식, 여인수, 수반행렬의 개념이 처음 등&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;portrait-of-youngblood.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/수학</category>
      <category>선형대수</category>
      <category>행렬</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/30</guid>
      <comments>https://perry03.tistory.com/30#entry30comment</comments>
      <pubDate>Sat, 16 May 2026 10:34:07 +0900</pubDate>
    </item>
    <item>
      <title>미분</title>
      <link>https://perry03.tistory.com/29</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. 미분&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;함수가 특정 지점에서 얼마나 빠르게 변하는가?&quot;를 측정하는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 가중치에서 Loss의 순간 기울기를 구하기 위해 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 산 등반과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 울퉁불퉁한 산이라고 생각하면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 구간은 완만하고 (기울기 작음)&lt;/li&gt;
&lt;li&gt;어떤 구간은 가파르고 (기울기 큼)&lt;/li&gt;
&lt;li&gt;어떤 구간은 평평함 (기울기 = 0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미분은 지금 내가 서 있는 바로 그 지점의 경사도를 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;지금 발 딛고 있는 곳이 얼마나 가파른가?&quot;를 측정하는 도구이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 수학적 정의&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2GTaL/dJMcaf0Rsyf/vlYkIajN2bo1RRp8sTPKak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2GTaL/dJMcaf0Rsyf/vlYkIajN2bo1RRp8sTPKak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2GTaL/dJMcaf0Rsyf/vlYkIajN2bo1RRp8sTPKak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2GTaL%2FdJMcaf0Rsyf%2FvlYkIajN2bo1RRp8sTPKak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;115&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x+h) - f(x) : x가 h만큼 변했을 때, 함수값의 변화량&amp;nbsp;&lt;/li&gt;
&lt;li&gt;h : x의 변화량&lt;/li&gt;
&lt;li&gt;h &amp;rarr; 0 : 그 간격을 0에 수렴 (h값이 0에 가까워 지도록 점점 줄여감. 0이 되는 것이 아님)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;x가 아주 조금 변할 때 f(x)가 얼마나 변하는가?&quot;의 비율이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. AI에서 미분의 역할&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 학습의 목표는 딱 하나이다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;손실함수(Loss)를 최소화하는 가중치(W)를 찾는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치 공간은 가중치 수만큼 차원이 생기고, 비선형 함수들이 쌓이면서 Loss 지형이 울퉁불퉁 해진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 무작정 가중치를 찾으러 다니면 평생 걸린다. 미분으로 지금 서 있는 곳의 경사를 계산하고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내리막 방향으로 한 걸음씩 이동한다. 이걸 수식으로 표현하면 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;W_new = W_oid - lr * dL/dW&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 58.372%; height: 81px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;기호&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;명칭&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;W_new&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;새 가중치&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;업데이트 후 가중치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;W_old&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;기존 가중치&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;업데이트 전 가중치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;lr&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;학습률 (Learning Rate)&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;한 걸음의 크기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;dL/dW&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;미분값(기울기, Gradient)&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;손실 L을 가중치 W로 미분화 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;d&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;미분 기호&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;&quot;~에 대한 변화율&quot;을 나타냄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;L&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;손실 (Loss)&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;모델 예측이 얼마나 틀렸는지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7624%;&quot;&gt;W&lt;/td&gt;
&lt;td style=&quot;width: 35.2329%;&quot;&gt;가중치 (Weight)&lt;/td&gt;
&lt;td style=&quot;width: 46.2747%;&quot;&gt;모델이 학습하는 파라미터&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기울기가 양수면 오른쪽으로 올라가는 경사이기 때문에 왼쪽으로 이동해서 가중치를 감소&lt;/li&gt;
&lt;li&gt;기울기가 음수면 왼쪽으로 올라가는 경사이기 때문에 오른쪽으로 이동해서 가중치를 증가&lt;/li&gt;
&lt;li&gt;기울기가 0이면 평평한 지점이기 때문에 최솟값(안장점)에 도달한 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 경사하강법(Gradient Descent)이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdGzOh/dJMcabYvFVD/R5kJSYXxZuzqDpo51lgJU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdGzOh/dJMcabYvFVD/R5kJSYXxZuzqDpo51lgJU0/img.png&quot; data-alt=&quot;경사하강법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdGzOh/dJMcabYvFVD/R5kJSYXxZuzqDpo51lgJU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdGzOh%2FdJMcabYvFVD%2FR5kJSYXxZuzqDpo51lgJU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;경사하강법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{3}. 경사하강법 전체 흐름 요약&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;모델 예측&lt;/li&gt;
&lt;li&gt;손실 계산&lt;/li&gt;
&lt;li&gt;미분으로 기울기 파악&lt;/li&gt;
&lt;li&gt;가중치 업데이트&lt;/li&gt;
&lt;li&gt;반복&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미분을 모르면 이 사이클 자체가 블랙박스가 된다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 할선과 접선&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 할선 (Secant Line) = 평균&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;두 점을 직선으로 이은 선&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서울 출발 ~ 부산 도착, 두 지점을 직선으로 이은 것&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 점 사이의 평균 변화율을 직선으로 그리기 위해 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JVwd7/dJMcahqTuPU/svPFp84gOSvB28CfKlC3s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JVwd7/dJMcahqTuPU/svPFp84gOSvB28CfKlC3s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JVwd7/dJMcahqTuPU/svPFp84gOSvB28CfKlC3s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJVwd7%2FdJMcahqTuPU%2FsvPFp84gOSvB28CfKlC3s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;346&quot; height=&quot;106&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x+h) - f(x) : y값의 변화량 (서울-부산 거리)&lt;/li&gt;
&lt;li&gt;h : x값의 변화량 (걸린 시간)&lt;/li&gt;
&lt;li&gt;m : 기울기 (평균 속도)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;천천히 가든, 늦게 가든, 신경 안쓰고 출발점과 도착점을 보고 평균을 낸 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 접선 (tangent Line) = 순간&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;한 점에서 곡선에 살짝 닿는 직선&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도위반&amp;nbsp; 카메라가 찍힌 그 순간의 속도다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;h를 0으로 줄였을 때 한 점에서의 순간 변화율을 직선으로 그리기 위해 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xqhqf/dJMcahxEBGt/ERWjnrybzUKiIrKQcyKnbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xqhqf/dJMcahxEBGt/ERWjnrybzUKiIrKQcyKnbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xqhqf/dJMcahxEBGt/ERWjnrybzUKiIrKQcyKnbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxqhqf%2FdJMcahxEBGt%2FERWjnrybzUKiIrKQcyKnbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;309&quot; height=&quot;103&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;h가 0에 수렴할 순간이 접선이고, 이게 접선의 기울기가 된다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). 핵심 관계&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;할선(평균 변화율)에서 h를 점점 줄이면 접선(순간변화율 = 미분)이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 미분의 정의 자체가 할선을 접선으로 수렴시키는 과정이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서는 손실함수 곡선 위 현재 가중치 위치에서 접선의 기울기 = dL/dW&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 구해야 어느 방향으로 내려갈지(가중치 조절) 알 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. 도함수&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;모든 x(점)에서의 미분값을 하나의 함수로 정리한 것&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 산 지형도와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;미분 = 산의 특정 한 지점의 경사도&lt;/li&gt;
&lt;li&gt;도함수 = 산 전체의 경사도를 지도로 그린 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 점만 아는 게 아니라, 모든 점에서의 기울기를 한 번에 표현한 함수다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 미분과 도함수&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 56.0465%; height: 113px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9222%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 28.851%;&quot;&gt;미분&lt;/td&gt;
&lt;td style=&quot;width: 34.7244%;&quot;&gt;도함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9222%;&quot;&gt;결과&lt;/td&gt;
&lt;td style=&quot;width: 28.851%;&quot;&gt;숫자 (특정 점의 기울기)&lt;/td&gt;
&lt;td style=&quot;width: 34.7244%;&quot;&gt;함수 (모든 점의 기울기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9222%;&quot;&gt;예시&lt;/td&gt;
&lt;td style=&quot;width: 28.851%;&quot;&gt;x=2에서 기울기 = 4&lt;/td&gt;
&lt;td style=&quot;width: 34.7244%;&quot;&gt;f`(x)=2x&amp;nbsp; (어디서든 계산 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표기법은 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f`(x) = dy/dx = df/dx&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 26.7442%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;표기&lt;/td&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;읽는 법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;f`(x)&lt;/td&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;&quot;f 프라임 x&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;dy/dx&lt;/td&gt;
&lt;td style=&quot;width: 17.3256%;&quot;&gt;&quot;x에 대한 y의 미분&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도함수가 있으면 가중치 W 값이 뭐든 바로 기울기를 계산할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L(W) = W^2 이라면&lt;/li&gt;
&lt;li&gt;L`(W) =2W &amp;rArr; 도함수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;W = 3일 때 기울기 = 2x3 = 6&lt;/li&gt;
&lt;li&gt;W = 5일 때 기울기 = 2x5 = 10&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매번 lim 계산할 필요 없이 도함수에 W값만 대입하면 끝이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 도함수 구하는 방법들&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 거듭제곱 법칙 (power Rule)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;x^n을 미분하면 nx^n-1이 되는 기본 미분 규칙&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 공식&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTVkl/dJMcagrXpyy/mK0YI2yPHXrTtRwjYF8TJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTVkl/dJMcagrXpyy/mK0YI2yPHXrTtRwjYF8TJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTVkl/dJMcagrXpyy/mK0YI2yPHXrTtRwjYF8TJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTVkl%2FdJMcagrXpyy%2FmK0YI2yPHXrTtRwjYF8TJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;260&quot; height=&quot;52&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지수를 앞으로 내리고, 지수를 1 줄여라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 비유하자면 &quot;계단 내려오기&quot;이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 x^4를 미분하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지수 4를 앞으로 내리고 (계수로)&lt;br /&gt;지수를 1 마이너스 해서&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= x^3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x^4 = 4x^3&lt;/li&gt;
&lt;li&gt;x^3 = 3x^2&lt;/li&gt;
&lt;li&gt;x^2 = 2x&lt;/li&gt;
&lt;li&gt;x = 1&lt;/li&gt;
&lt;li&gt;x^0 = 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n이 정수가 아니여도 적용된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = x^(1/2) = &amp;radic;x&lt;/li&gt;
&lt;li&gt;f`(x) = (1/2)x^(-1/2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = x^(-1) = 1/x&lt;/li&gt;
&lt;li&gt;f`(x) = -1x^(-2) = -1/x^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실함수가 L(W) = W^2 형태일 때 적용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 x 자리에 W가 들어간 것이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;거듭제곱 법칙 : f(x) = x^2 &amp;rarr; f`(x) = 2x&lt;/li&gt;
&lt;li&gt;손실함수 : L(W) = W^2 &amp;rarr; L`(W) = 2W&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 L(W) = W2는 단순화한 예시이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 손실함수 *MSE는 아래처럼 생겼다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L(W) = y -Wx)^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? MSE : 예측값과 실제값 사이의 오차를 수치로 표현한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;W^2 형태가 아니다. 분배법칙하고, 거듭제곱 법칙으로 풀수 있기는 한데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지수가 커지면 전개가 불가능하거나 비효율적인 경우가 있기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 정리할 연쇄 법칙이 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 곱 법칙 (Product Rule)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;두 함수의 곱을 미분하는 규칙&quot;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SP9xi/dJMcahYHmQC/2hpbcr5nd6b4ei2XITYZB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SP9xi/dJMcahYHmQC/2hpbcr5nd6b4ei2XITYZB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SP9xi/dJMcahYHmQC/2hpbcr5nd6b4ei2XITYZB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSP9xi%2FdJMcahYHmQC%2F2hpbcr5nd6b4ei2XITYZB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;45&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞 미분 x 뒤 + 앞 x 뒤 미분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;직사각형 넓이&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가로 g(x), 세로 h(x)인 직사각형이 x가 변할 때 넓이가 어떻게 변하는가?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;넓이 변화 = (가로 변화 x 현재 세로) + (현재 가로 x 세로 변화)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 다 동시에 변하니까 두 경우를 더해야 전체 변화량이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = x^2 * x^3&lt;/li&gt;
&lt;li&gt;g(x) = x^2 &amp;rarr; g`(x) = 2x&lt;/li&gt;
&lt;li&gt;h(x) = x^3 &amp;rarr; h`(x) = 3x^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f`(x) = 2x * x^3 + x^2 * 3x^2&lt;/li&gt;
&lt;li&gt;= 2x^4 + 3x^4&lt;/li&gt;
&lt;li&gt;5x^4&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 신경망 레이어는 가중치 x 활성화 함수 형태이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(W) = W x &amp;sigma;(x) (&amp;sigma;는 시그마 기호다)&lt;/li&gt;
&lt;li&gt;f(W) = g(W) * h(W)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 W로 미분할 때 곱 법칙이 적용된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). 몫 법칙 (Quotient Rule)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;두 함수의 나눗셈을 미분하는 규칙&quot;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvojEM/dJMcadvayQD/QMSQFYk1vQphT9uFKwoUVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvojEM/dJMcadvayQD/QMSQFYk1vQphT9uFKwoUVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvojEM/dJMcadvayQD/QMSQFYk1vQphT9uFKwoUVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvojEM%2FdJMcadvayQD%2FQMSQFYk1vQphT9uFKwoUVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;84&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞 미분 * 뒤 - 뒤 미분 / 뒤^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;반 평균 점수&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 점수 합 g(x) / 학생 수 h(x) = 평균 점수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균이 변하려면 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;점수 합이 올라가거나 (분자 변화)&lt;/li&gt;
&lt;li&gt;학생 수가 바뀌거나 (분모 변화)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 분모가 커지면 평균은 내려가니까 부호가 &quot;-(마이너스)&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = x^2 / x^3&lt;/li&gt;
&lt;li&gt;g(x) = x^2 &amp;rarr; g`(x) = 2x&lt;/li&gt;
&lt;li&gt;h(x) = x^3 &amp;rarr;h`(x) = 3x^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f`(x) = (2x * x^3 - x^2 * 3x^2) / (x^2)^2&lt;/li&gt;
&lt;li&gt;= (2x^4 - 3x^4) / x^4&lt;/li&gt;
&lt;li&gt;= -x^4 / x^4&lt;/li&gt;
&lt;li&gt;= 1/x^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attention 메커니즘의 *SoftMax가 분수 형태다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?SoftMax : 여러 숫자를 합이 1인 확률 분포로 바꿔주는 함수&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t5dIc/dJMcabxoXwU/QLn5Yloq3x4HyrYnri4u3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t5dIc/dJMcabxoXwU/QLn5Yloq3x4HyrYnri4u3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t5dIc/dJMcabxoXwU/QLn5Yloq3x4HyrYnri4u3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft5dIc%2FdJMcabxoXwU%2FQLn5Yloq3x4HyrYnri4u3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;169&quot; height=&quot;96&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 숫자를 전체 합이 1이 되는 확률로 변환해주는 수식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 미분할 때 몫 법칙이 적용된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(4). 연쇄 법칙 (Chain Rule)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;겹겹이 쌓인 함수를 바깥에서 안으로 순서대로 미분하는 규칙&quot;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deBm5C/dJMcaiQODQ9/2jTIc5QebT2LO20J5uIhm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deBm5C/dJMcaiQODQ9/2jTIc5QebT2LO20J5uIhm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deBm5C/dJMcaiQODQ9/2jTIc5QebT2LO20J5uIhm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeBm5C%2FdJMcaiQODQ9%2F2jTIc5QebT2LO20J5uIhm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;47&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바깥 미분 * 안 미분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;톱니바퀴&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;톱니바퀴 3개가 연결되어 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A &amp;rarr; B &amp;rarr; C&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A가 움직이면 B가 움직이고, B가 움직이면 C가 움직인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 C가 얼마나 변하는가를 구하려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(B &amp;rarr; C 변화율) * (A &amp;rarr; B 변화율)로 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수도 똑같다. 안쪽 함수가 변하면 바깥 함수도 연쇄적으로 변한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = (x^2 + 1)^3&lt;/li&gt;
&lt;li&gt;안쪽 h(x) = x^2 + 1 &amp;rarr; h`(x) = 2x&lt;/li&gt;
&lt;li&gt;바깥 g(u) = u^3 &amp;rarr;g`(u) = 3u^2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f`(x) = g`(h(x) * h`(x)&lt;/li&gt;
&lt;li&gt;= 3(x^2 + 1)^2 * 2x&lt;/li&gt;
&lt;li&gt;= 6x(x^2 + 1)^2&lt;/li&gt;
&lt;li&gt;= 6x^5 + 12x^3 + 6x&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 연쇄법칙이 핵심인 이유는 역전파 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신경망은 함수가 겹겹이 쌓인 구조다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 x &amp;rarr; 레이어 1 &amp;rarr; 레이어 2 &amp;rarr; ... &amp;rarr; 손실 L&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 수식으로 쓰면 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L = f(g(h(x)))&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 되며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실 L을 x로 미분하려면 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dL/dx = dL/df * df/dg * dg/dh * dh/dx&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;겹겹이 쌓인 연쇄 법칙 = 역전파&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이어가 100개면 연쇄 법칙을 100번 적용하는 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(5). 정리&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b64OI6/dJMcafzP8Mi/IQFvLfc62AZrslBh9zBWXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b64OI6/dJMcafzP8Mi/IQFvLfc62AZrslBh9zBWXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b64OI6/dJMcafzP8Mi/IQFvLfc62AZrslBh9zBWXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb64OI6%2FdJMcafzP8Mi%2FIQFvLfc62AZrslBh9zBWXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;711&quot; height=&quot;387&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 삼각함수 미분법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 공식 정리&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 24.3023%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.5814%;&quot;&gt;함수&lt;/td&gt;
&lt;td style=&quot;width: 13.7209%;&quot;&gt;미분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.5814%;&quot;&gt;sin(x)&lt;/td&gt;
&lt;td style=&quot;width: 13.7209%;&quot;&gt;cos(x)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.5814%;&quot;&gt;cos(x)&lt;/td&gt;
&lt;td style=&quot;width: 13.7209%;&quot;&gt;-sin(x)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.5814%;&quot;&gt;tan(x)&lt;/td&gt;
&lt;td style=&quot;width: 13.7209%;&quot;&gt;1/cos^2(x)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;파도&quot;다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sin(x)는 파도처럼 위아래로 움직인다.&lt;/li&gt;
&lt;li&gt;sin(x) : 파도의 높이&lt;/li&gt;
&lt;li&gt;cos(x) : 파도의 속도 (높이의 변화율)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파도가 최고점일 떄 속도는 0, 중간 일 떄 속도가 가장 빠른 것처럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sin을 미분하면 cos이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = sin(x) &amp;rarr; f`(x) = cos(x)&lt;/li&gt;
&lt;li&gt;f(x) = cos(x) &amp;rarr; f`(x) = -sin(x)&lt;/li&gt;
&lt;li&gt;f(x) = sin(x^2) &amp;rarr; 연쇄 법칙 적용으로 cos(x^2) * 2x&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼각함수 미분은 AI에서 거의 안 쓰인다. Positional Encoding에서 sin/cos가 등장하긴 하는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미분할 일은 거의 없다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 지수&amp;middot;로그 미분 &amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 공식 정리&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 28.4884%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9302%;&quot;&gt;함수&lt;/td&gt;
&lt;td style=&quot;width: 17.5582%;&quot;&gt;미분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9302%;&quot;&gt;e^x&lt;/td&gt;
&lt;td style=&quot;width: 17.5582%;&quot;&gt;e^x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9302%;&quot;&gt;a^x&lt;/td&gt;
&lt;td style=&quot;width: 17.5582%;&quot;&gt;a^x * ln(a)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9302%;&quot;&gt;ln(x)&lt;/td&gt;
&lt;td style=&quot;width: 17.5582%;&quot;&gt;1/x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9302%;&quot;&gt;log_a(x)&lt;/td&gt;
&lt;td style=&quot;width: 17.5582%;&quot;&gt;1/(x * ln(a))&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? ln = 자연로그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e^x를 미분했는데 자기 자신이 나오는 이유는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;복리 이자&quot;에 비유할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e^x는 &quot;지금 잔고가 곧 변화 속도&quot;인 통장이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;잔고 100만원 &amp;rarr; 변화 속도 100만원/일&lt;/li&gt;
&lt;li&gt;잔고 200만원 &amp;rarr; 변화 속도 200만원/일&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잔고가 많을수록 더 빠르게 늘어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 미분해도 자기 자신 e^x가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 핵심인 이유는 *Cross Entropy 손실함수 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? Cross Entropy : 모델이 예측한 확률 분포가 정답과 얼마나 다른지 측정하는 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;159&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ZxIR/dJMcabRF9Ey/NXN0z8BliSzZKJIXhDge21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ZxIR/dJMcabRF9Ey/NXN0z8BliSzZKJIXhDge21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ZxIR/dJMcabRF9Ey/NXN0z8BliSzZKJIXhDge21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ZxIR%2FdJMcabRF9Ey%2FNXN0z8BliSzZKJIXhDge21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;159&quot; height=&quot;58&quot; data-origin-width=&quot;159&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 미분해야 역전파가 가능한데, ln 미분이 바로 여기에 쓰인다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;d/dy ln(ŷ) = 1/ŷ&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoftMax + Croiss Entropy 미분할 때 매번 등장하는 공식이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 왜 log가 손실함수에 쓰이는가?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측값 ŷ이 정답에 가까울수록 손실이 0에 수렴하고, 틀릴수록 손실이 폭발적으로 커지는 특성이 필요한데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;log가 그 곡선을 자연스럽게 만들어준다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ŷ = 1.0(완벽) &amp;rarr; -ln(1.0) = 0&lt;/li&gt;
&lt;li&gt;ŷ = 0.5(애매)&amp;nbsp;&amp;rarr; -ln(0.5) = 0.69&lt;/li&gt;
&lt;li&gt;ŷ = 0.1(틀림)&amp;nbsp;&amp;rarr; -ln(0.1) = 2.30&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. 함수의 극솟값과 극댓값&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;함수의 그래프에서 주변보다 높은 점(극대), 낮은 점(극소)&quot;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;극솟값 : 기울기가 0이면서 주변보다 낮은 지점으로 Loss의 최솟값 후보&lt;/li&gt;
&lt;li&gt;극댓값 : 기울기가 0이면서 주변보다 높은 지점으로 학습에서 피해야 할 지점&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;산악 지형&quot;이다&lt;/p&gt;
&lt;pre id=&quot;code_1778668218036&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        극대
       /    \
      /      \        극대
     /        \      /    \
────/          \    /      \────
                \  /
                 \/
                극소&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;극댓값 = 주변보다 높은 봉우리&lt;/li&gt;
&lt;li&gt;극솟값 = 주변보다 낮은 골짜기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;전체에서 가장 높은 것&quot;이 아니라 주변과 비교해서 높고 낮은 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 핵심 조건&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;극값이 존재하려면 그 점에서 미분값이 0이여야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f`(x) = 0 &amp;rarr; 기울기가 0 &amp;rarr; 극대 또는 극소 후보&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기울기가 0이라는 건 그 지점이 평평하다는 의미다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 극대 vs 극소 구분법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;f`(x) = 0인 점을 찾은 후, 그 전후 기울기 부호를 보면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전후 기울기 : + &amp;rarr; 0 &amp;rarr; - = 극대 (올라가다 내려감)&lt;/li&gt;
&lt;li&gt;전후 기울기 : - &amp;rarr; 0 &amp;rarr; + = 극소 (내려가다 올라감&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = x^3 - 3x 라는 수식을 미분하면&lt;/li&gt;
&lt;li&gt;f`(x) = 3x^2 -3 =0 이 되며, 방정식을 풀면&lt;/li&gt;
&lt;li&gt;x^2 = 1&lt;/li&gt;
&lt;li&gt;x = 1, x = -1 으로 극값 후보를 구할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x = -1 : 전후 기울기 + &amp;rarr; - = 극대, f(-1) = 2&lt;/li&gt;
&lt;li&gt;x = 1 전후 기울기 - &amp;rarr; + = 극소, f(1) = -2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 손실함수의 최솟값을 찾는 게 학습 목표다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dL/dW = 0 &amp;rarr; 극값 후보 &amp;rArr; 여기가 최솟값이길 바라는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 문제가 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;진짜 최솟값 (Global minimum) &amp;rArr; 원하는 것&lt;/li&gt;
&lt;li&gt;가짜 최솟값 (local minimum) &amp;rArr; 빠질 수 있는 함정&lt;/li&gt;
&lt;li&gt;안장점 (saddle point) &amp;rArr; 기울기=0인데 극값 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경사하강법이 dL/dW = 0인 지점에 도달했다고 해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항상 최적의 가중치는 아닌 이유가 여기에 있다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. 편미분&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;여러 변수 중 하나만 변수로 보고, 나머지는 상수로 고정한 채 미분&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분은 가중치가 수백만 개니까, 각각이 Loss에 얼마나 영향을 주는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따로따로 계산하기 위해서 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;커피 맛&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커피 맛f가 두 가지에 의해 결정된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(원두량, 물 양) = 커피 맛&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분은 이렇게 묻는 것이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물 양을 고정하고, 원두량만 바꾸면 맛이 얼마나 변하는가?&lt;/li&gt;
&lt;li&gt;원두량을 고정하고, 물 양만 바꾸면 맛이 얼마나 변하는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번에 하나씩만 건드리는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표기법은 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;f/ &amp;part;x = x에 대한 f의 편미분 (y는 상수 취급)&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;y = y에 대한 f의 편미분 (x는 상수 취급)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;part;는 편미분 기호로 d 대신 사용한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분 예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x, y) = x^2 + 3xy + y^2&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;x = 2x + 3y (y는 상수 취급)&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;y = 3x + 2y (x는 상수 취급)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 핵심인 이유는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신경망 가중치는 하나가 아니라 수백만 개다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L(W_1, W_2, W_3 .. W_n)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 가중치가 손실에 얼마나 영향을 주는지 따로따로 계산해야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;L/ &amp;part;W_1 : W_1이 손실에 미치는 영향&lt;/li&gt;
&lt;li&gt;&amp;part;L/&amp;nbsp;&amp;part;W_2 : W_2이 손실에 미치는 영향&lt;/li&gt;
&lt;li&gt;&amp;part;L/&amp;nbsp;&amp;part;W_n : W_n이 손실에 미치는 영향&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 혼합 편미분&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;편미분을 두 번 하는데, 서로 다른 변수로 순서대로 미분&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 위의 커피 맛의 연장선이라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커피 맛 비유에서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물 양을 고정하고 원두량만 바꾼 변화율을 구했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼합 편미분은 한 발 더 나아가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원두랑 변화가 맛에 미치는 영향이 물 양에 따라 얼마나 달라지는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변화율의 변화율을 구하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표기법은 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;^2f/ &amp;part;y &amp;part;x = x로 먼저 미분, 그 다움 y로 미분&lt;/li&gt;
&lt;li&gt;&amp;part;^2f/&amp;nbsp;&amp;part;x&amp;nbsp;&amp;part;y = y로 먼저 미분, 그 다움 x로 미분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;예를 들면&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x, y) = x^2 + 3xy + y^2 같은 이차 방정식이 있다고 하자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1단계 : x로 편미분&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;f/ &amp;part;x = 2x + 3y&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2단계 : 그 결과를 y로 편미분&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;^2f/ &amp;part;y &amp;part;x = 3&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서를 바꿔도 결과는 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 혼합 편미분 자체가 딥러닝에서 직접 쓰이는 경우는 드물다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2차 미분 기반 최적화(뉴턴법 등)에서 등장하긴 하지만, 일반적인 경사하강법에선 잘 안쓴다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 편미분 연쇄법칙&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;여러 변수가 얽힌 함수를 연쇄적으로 편미분&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신경망은 함수가 겹겹이 쌓여 있어서, 안쪽 가중치의 영향을 계산하려면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바깥층부터 순서대로 미분을 전달해야 하기 때문에 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;공장 생산량&quot;이다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;온도(x), 습도(y) &amp;rarr; 재료 상태(z) = 최종 생산량(L)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온도가 변하면 모든게 변한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dL/dx = &amp;part;L/ &amp;part;z * &amp;part;z/ &amp;part;x&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간 단계를 거쳐서 전달되는 변화율을 계산하는 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 공식&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L = f(z)&lt;/li&gt;
&lt;li&gt;z = g(x, y)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일 떄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;L/ &amp;part;x = &amp;part;L/ &amp;part;z * &amp;part;z/ &amp;part;x&lt;/li&gt;
&lt;li&gt;&amp;part;L/ &amp;part;y = &amp;part;L/ &amp;part;z * &amp;part;z/ &amp;part;y&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 핵심인 이유는 신경망 역전파가 이 구조다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L &amp;rarr; 레이어3 &amp;rarr; 레이어2 &amp;rarr; 레이어1 &amp;rarr; W&lt;/li&gt;
&lt;li&gt;&amp;part;L/ &amp;part;W = &amp;part;L/ &amp;part;레이어3 * &amp;part;레이어3/ &amp;part;레이어2 * &amp;part;레이어2/ &amp;part;레이어1 * &amp;part;레이어1/ &amp;part;W&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 레이어를 거슬러 올라가면서 편미분 연쇄법칙을 반복 적용하는 게 역전파다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;831&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhzVbO/dJMcag6zpuO/NkA1Dv45ZNSQzNVtpWV5kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhzVbO/dJMcag6zpuO/NkA1Dv45ZNSQzNVtpWV5kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhzVbO/dJMcag6zpuO/NkA1Dv45ZNSQzNVtpWV5kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhzVbO%2FdJMcag6zpuO%2FNkA1Dv45ZNSQzNVtpWV5kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;639&quot; height=&quot;831&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;831&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. Gradient&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;편미분 결과를 전부 모아놓은 벡터&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;part;L/ &amp;part;W_1, &amp;part;L/ &amp;part;W_2 ... 을 따로따로 쓰면 너무 길어지니까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 하나의 벡터로 묶은 게 &amp;nabla;L(W)이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 &quot;산 지형도 나침반&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분이 &quot;동쪽 경사&quot;, &quot;북쪽 경사&quot;를 따로따로 재는 거라면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient는 그걸 합쳐서 가장 가파른 방향과 경사도를 동시에 알려주는 나침반이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 공식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x, y) 일 때&lt;/li&gt;
&lt;li&gt;&amp;nabla;f = [ &amp;part;f/ &amp;part;x, &amp;part;f/ &amp;part;y]&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;x = x 방향&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;y = y 방향&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nabla;는 나블라(nabla)라고 읽는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나블라는 벡터 미적분학에서 공간의 각 지점에서의 변화율을 계산하는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터 미분 연산자이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x, y) = x^2 + y^2&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;x = 2x&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;y = 2y&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nabla;f = [2x, xy]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x = 1, y = 2일 때 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nabla;f = [2, 4] &amp;rArr; 이 지점에서 가장 가파른 방향이 된다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 시각화&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blOOqQ/dJMcahqTHM7/KpsFK3MUCjBKaNTt3JhHRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blOOqQ/dJMcahqTHM7/KpsFK3MUCjBKaNTt3JhHRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blOOqQ/dJMcahqTHM7/KpsFK3MUCjBKaNTt3JhHRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblOOqQ%2FdJMcahqTHM7%2FKpsFK3MUCjBKaNTt3JhHRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;772&quot; height=&quot;618&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간 화살표가 Gradient(오르막), 파란 경로가 그 반대 방향으로 이동하는 경사하강법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등고선 안쪽일수록 Loss가 낮아지고, 최종 목표는 가운데 Global Min이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경사하강법은 반대로 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient는 오르막을 가리키니까, 경사하강법은 화살표 반대 방향으로 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nabla;L(W) = [&amp;part;L/&amp;part;W₁, &amp;part;L/&amp;part;W₂, &amp;part;L/&amp;part;W₃ ... &amp;part;L/&amp;part;Wₙ]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치가 수백만 개여도 Gradient 하나에 전부 담긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;W_new = W_old - lr * &amp;nabla;L(W)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식은 위쪽에서 정리한 dL/dW 수식인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식의 다변수 버전이 Gradient이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. 전체 정리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 미분이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;x가 아주 조금 변할 때 f(x)가 얼마나 변하는가&quot;의 비율이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서는 손실함수의 기울기를 구해 가중치를 업데이트하는 데 사용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;W_new = W_old - lr * dL/dW&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 할선 /접선&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 51.1626%; height: 63px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 6.43424%; height: 21px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 20.7024%; height: 21px;&quot;&gt;의미&lt;/td&gt;
&lt;td style=&quot;width: 20.6502%; height: 21px;&quot;&gt;수식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 6.43424%; height: 21px;&quot;&gt;할선&lt;/td&gt;
&lt;td style=&quot;width: 20.7024%; height: 21px;&quot;&gt;두 점 사이 평균 변화율&lt;/td&gt;
&lt;td style=&quot;width: 20.6502%; height: 21px;&quot;&gt;&amp;Delta;y/&amp;Delta;x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 6.43424%; height: 21px;&quot;&gt;접선&lt;/td&gt;
&lt;td style=&quot;width: 20.7024%; height: 21px;&quot;&gt;한 점에서의 순간 변화율&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20.6502%; height: 21px;&quot;&gt;lim(h&amp;rarr;0) (f(x+h)-f(x))/h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할선을 h &amp;rarr;0으로 수렴시키면 접선 = 미분의 정의가 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 도함수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 점의 기울기(숫자) -&amp;gt; 모든 점의 기울기(함수)로 확장한 것이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 71.0447%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;법칙&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;형태&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;핵심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;거듭제곱&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;xⁿ &amp;rarr; nxⁿ⁻&amp;sup1;&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;지수를 앞으로 내리고 1 감소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;곱 법칙&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;g&amp;middot;h &amp;rarr; g'h + gh'&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;앞 미분*뒤 + 앞*뒤 미분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;몫 법칙&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;g/h &amp;rarr; (g'h - gh')/h&amp;sup2;&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;앞 미분*뒤 - 앞*뒤 미분 / 뒤^2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;연쇄 법칙&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;g(h(x)) &amp;rarr; g'(h(x))&amp;middot;h'(x)&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;바깥 미분 * 안 미분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;삼각함수&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;sin&amp;rarr;cos, cos&amp;rarr;-sin&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;AI에서 거의 안 쓰임&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.6124%;&quot;&gt;지수와 로그&lt;/td&gt;
&lt;td style=&quot;width: 27.6356%;&quot;&gt;eˣ&amp;rarr;eˣ, ln(x)&amp;rarr;1/x&lt;/td&gt;
&lt;td style=&quot;width: 28.7984%;&quot;&gt;Cross Entropy 미분에 직접 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 극솟값/극댓값&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f`(x) = 0인 지점 = 극값 후보&lt;/li&gt;
&lt;li&gt;전후 기울기 + &amp;rarr; - = 극대 | - &amp;rarr; + = 극소&lt;/li&gt;
&lt;li&gt;AI에서 손실함수 최솟값 탐색의 수학적 근거&lt;/li&gt;
&lt;li&gt;함정 : local minimum, saddle point&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 편미분&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 변수 중 하나만 변수로 보고 나머지는 상수 취급&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x, y) = x^2 + 3xy + y2&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;x = 2x + 3y (y 고정)&lt;/li&gt;
&lt;li&gt;&amp;part;f/ &amp;part;y = 2x + 3y (x 고정)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼합 편미분 : 서로 다른 변수로 두 번 미분. 순서 바꿔도 결과는 동일 (클레로 정리). AI에서 직접 사용은 드물다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분 연쇄법칙 : 중간 단계를 거쳐 전달되는 변화율로 역전파의 본질이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;part;L/ &amp;part;W = &amp;part;L/ &amp;part;레이어 * &amp;part;레이어3/ &amp;part;레이어2 ... &amp;part;레이어1/ &amp;part;W&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. Gradient&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분 결과를 전부 모은 벡터, &amp;nabla;(나블라)로 표기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;= [&amp;part;L/&amp;part;W₁, &amp;part;L/&amp;part;W₂ ... &amp;part;L/&amp;part;Wₙ]&lt;/li&gt;
&lt;li&gt;W_new = W_old - lr * &amp;nabla;L(W)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dL/dW의 다변수 버전이 Gradient이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미분은 &quot;함수가 얼마나 빠르게 변하는가?&quot;를 측정하는 도구이며, 할선에서 출밣하여 접선으로 수렴하는 과정이 미분의 본질이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도함수는 이를 모든 점에서 사용할 수 있게 함수로 확장하고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편미분과 그래디언트는 이를 다변수로 일반화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 AI에서 미분은 손실함수의 기울기를 계산하여 가중치를 업데이트하는 경사하강법의 수학적 토대이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역전파는 편미분 연쇄법칙을 레이어 전체에 반복 전용한 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chDYM4/dJMcajhTh1Y/hC1JjXknxv5ZBafSKcdkrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chDYM4/dJMcajhTh1Y/hC1JjXknxv5ZBafSKcdkrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chDYM4/dJMcajhTh1Y/hC1JjXknxv5ZBafSKcdkrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchDYM4%2FdJMcajhTh1Y%2FhC1JjXknxv5ZBafSKcdkrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;469&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/수학</category>
      <category>그래디언트</category>
      <category>도함수</category>
      <category>미분</category>
      <category>편미분</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/29</guid>
      <comments>https://perry03.tistory.com/29#entry29comment</comments>
      <pubDate>Wed, 13 May 2026 20:31:33 +0900</pubDate>
    </item>
    <item>
      <title>Attribution</title>
      <link>https://perry03.tistory.com/28</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. Attribution&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Attribution이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI가 해당 결론을 내린 이유가 뭔지 입력의 어떤 부분이 얼마나 영향을 줬는지 수치로 측정하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하면 AI의 판단 근거를 역추적하는 기술이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 이미지 &amp;rarr; AI &amp;rarr; 종양 발견 (확률 94%)&lt;/li&gt;
&lt;li&gt;Attribution은 &quot;종양 있음&quot; 이 판단은 어떤 영역 때문인지 수치로 측정해 준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 배경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 AI의 문제 - 블랙박스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델은 성능은 뛰어난데 왜 그런 결론을 냈는지 알 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 특히 의료 AI에서 치명적이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의사 입장에서 AI가 왜 정상이라고 했는지를 모르면 AI를 믿고 사용할 수가 없다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. XAI 등장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{2} 문제를 해결하려고 나온 분야가 XAI이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution은 XAI의 핵심 도구 중 하나이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 핵심 아이디어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;입력의 각 부분에 기여도(점수)를 매기자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution의 핵심은 입력의 각 요소가 출력에 얼마나 기여했는지 수치화하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 : 뇌 MRI 이미지 (픽셀들)&lt;/li&gt;
&lt;li&gt;출력 : &quot;종양 있음 94%&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution 결과 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 부분 픽셀들 &amp;rarr; +0.9 (종양 판단에 강하게 기여)&lt;/li&gt;
&lt;li&gt;이 부분 픽셀들&amp;nbsp;&amp;rarr; +0.2 (약하게 기여)&lt;/li&gt;
&lt;li&gt;이 부분 픽셀들&amp;nbsp;&amp;rarr; 0.0 (기여 없음)&lt;/li&gt;
&lt;li&gt;이 부분 픽셀들&amp;nbsp;&amp;rarr; -0.3 (오히려 방해)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이걸 시각화하면 히트맵이 나온다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. 기본 구조&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 전체 흐름&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력&lt;/li&gt;
&lt;li&gt;학습된 AI 모델&lt;/li&gt;
&lt;li&gt;출력 (예측값)&lt;/li&gt;
&lt;li&gt;Attribution 계산&lt;/li&gt;
&lt;li&gt;히트맵 시각화&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 입력&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution의 입력은 픽셀 단위로 쪼개진 이미지다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;28x28 이미지 = 784개의 픽셀&lt;/li&gt;
&lt;li&gt;각 픽셀은 0 ~ 225 사이 숫자이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 학습된 AI 모델&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution은 이미 학습이 완료된 모델에 적용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습 완료된 모델 f&lt;/li&gt;
&lt;li&gt;x를 넣으면 &amp;rarr; 출력 f(x)가 나옴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 건 모델 자체를 건드리지는 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델은 고정된 채로, 입력과 출력만 분석한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 출력(예측값)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 입력을 보고 내린 결론이다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = 0.94 &amp;rArr; 종양 있음 94%&lt;/li&gt;
&lt;li&gt;f(x) = 0.06 &amp;rArr; 정상 6%&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution은 이 출력값을 기준으로 &quot;어떤 입력이 이 숫자를 만들었나&quot;를 역추적한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. Attribution 계산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 픽셀이 출력에 얼마나 기여했는지 점수로 변환하는 단계이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;픽셀 1 &amp;rArr; 기여도 +0.8 (종양 판단에 강하게 기여)&lt;/li&gt;
&lt;li&gt;픽셀 2 &amp;rArr; 기여도 +0.3 (약하게 기여)&lt;/li&gt;
&lt;li&gt;픽셀 3 &amp;rArr; 기여도 0.0 (기여 없음)&lt;/li&gt;
&lt;li&gt;픽셀 4 &amp;rArr; 기여도 -0.2 (오히려 방해)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{6}. 히트맵 시각화&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{5}에서 나온 기여도 점수를 색깔로 변환해서 원본 이미지 위에 덮는다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기여도 높음 (양수) &amp;rArr; 빨간색&lt;/li&gt;
&lt;li&gt;기여도 없음 (0) &amp;rArr; 회색&lt;/li&gt;
&lt;li&gt;기여도 낮음 (음수) &amp;rArr; 파란색&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 히트맵을 보고 의사는 &quot;AI가 이 빨간 영역을 보고 종양이라고 판단했구나&quot;라고 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. 수식 - 완전성 공리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 픽셀의 기여도를 다 더하면 반드시 모델의 실제 출력값이 나와야 한다는 조건을 완전성 공리라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;179&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blUhqr/dJMcagrPGeJ/LP8fPb58qdgng9I8VzZYNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blUhqr/dJMcagrPGeJ/LP8fPb58qdgng9I8VzZYNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blUhqr/dJMcagrPGeJ/LP8fPb58qdgng9I8VzZYNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblUhqr%2FdJMcagrPGeJ%2FLP8fPb58qdgng9I8VzZYNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;179&quot; height=&quot;62&quot; data-origin-width=&quot;179&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo2kvC/dJMcabKSp9u/8C6WszajkbXxmhK0mDIv20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo2kvC/dJMcabKSp9u/8C6WszajkbXxmhK0mDIv20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo2kvC/dJMcabKSp9u/8C6WszajkbXxmhK0mDIv20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo2kvC%2FdJMcabKSp9u%2F8C6WszajkbXxmhK0mDIv20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;365&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 설명하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 픽셀 기여도의 합 = 실제 출력 - 기준 출력이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀 프로젝트에서 팀원 기여도를 다 더하면 프로젝트 총점이 나와야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기여도가 허공으로 사라지거나 생기면 안 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 기존점(Baseline) x` - 아무 정보도 없는 입력&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지에서 기준점 : 완전히 검은 이미지 (픽셀 전부 0)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트에서 기준점 : 빈 문장&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 왜 필요한가?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution은 &quot;기준점 대비 실제 입력이 얼마나 다른가?&quot;를 측정하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준이 없으면 기여도를 상대적으로 비교할 수 없다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Attribution 계산 방법별 수식&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Gradient 기반 (Saliency Map)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;94&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JZxOy/dJMcac31dtY/lbW6SFoDagh0bkA6sq1Ja0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JZxOy/dJMcac31dtY/lbW6SFoDagh0bkA6sq1Ja0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JZxOy/dJMcac31dtY/lbW6SFoDagh0bkA6sq1Ja0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJZxOy%2FdJMcac31dtY%2FlbW6SFoDagh0bkA6sq1Ja0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;94&quot; height=&quot;67&quot; data-origin-width=&quot;94&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;픽셀 x_i를 조금 바꿨을 때 출력 f(x)가 얼마나 변하나?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기울기가 크다 = 이 픽셀이 출력에 큰 영향을 줌 &amp;rArr; 기여도 높음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기울기가 작다 = 이 픽셀이 출력에 별 영향 없음 &amp;rArr; 기여도 낮음&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). I ntegrated Gradients (적분 기울기)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdTXAu/dJMcahj1iuI/sGuEGNCPkdClwl6Hd5tMbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdTXAu/dJMcahj1iuI/sGuEGNCPkdClwl6Hd5tMbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdTXAu/dJMcahj1iuI/sGuEGNCPkdClwl6Hd5tMbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdTXAu%2FdJMcahj1iuI%2FsGuEGNCPkdClwl6Hd5tMbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;68&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식이 복잡해 보이지만 쪼개면 단순하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(x_i - x`_i) : 기준점 대비 실제 픽셀값 차이&lt;/li&gt;
&lt;li&gt;&amp;int;... d&amp;alpha; : 기준점 &amp;rarr; 실제 입력까지의 기울기 평균&lt;/li&gt;
&lt;li&gt;곱하기 : 차이 x 평균 기울기 = 최종 기여도&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 기준점(검은 이미지)에서 실제 이미지까지 조금씩 걸어가면서 매 걸음마다 기울기를 재고, 평균을 내는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient 기반이 한 지점만 보는 것이라면 Integrated Gradients는 전체 경로를 다 보는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). SHAP&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEMto2/dJMcacXgnkk/R5CRmrSaWJ7nbCuaEYEYr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEMto2/dJMcacXgnkk/R5CRmrSaWJ7nbCuaEYEYr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEMto2/dJMcacXgnkk/R5CRmrSaWJ7nbCuaEYEYr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEMto2%2FdJMcacXgnkk%2FR5CRmrSaWJ7nbCuaEYEYr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;80&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심만 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;f(S U {i}) - f(S)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;픽셀 i를 포함했을 때 출력 - 픽셀 i를 뺐을 때 출력&lt;/li&gt;
&lt;li&gt;픽셀 i의 순수한 기여도이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;축구팀에서 선수 한 명의 기여도를 측정할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가능한 모든 팀 조합에서 그 선수가 있을 때와 없을 때 성적 차이의 평균을 내는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 &quot;이 선수가 좋냐?&quot;가 아니라 &quot;어떤 조합에서도 공평하게&quot; 기여도를 측정한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(4). 정리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 feature 기여도를 다 더하면 baseline 대비 예측값 변화량과 정확히 일치해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명이 새거나 부풀려지면 안 된다는 보존 법칙이 완전성 공리이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완전성 공리를 위해 결국 아래 조건을 만족해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;209&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvUYQa/dJMcabjNCG0/winmaIMgbtnHqmvY322nbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvUYQa/dJMcabjNCG0/winmaIMgbtnHqmvY322nbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvUYQa/dJMcabjNCG0/winmaIMgbtnHqmvY322nbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvUYQa%2FdJMcabjNCG0%2FwinmaIMgbtnHqmvY322nbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;209&quot; height=&quot;84&quot; data-origin-width=&quot;209&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;좌변 : 모든 feature 기여도의 합&lt;/li&gt;
&lt;li&gt;우변 : 실제 예측 - baseline 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘이 반드시 같아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완전성 공리에 대해 기법들을 다시 정리해 보면 아래와 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 43.8372%; height: 102px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.7143%;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;width: 42.3395%;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.7143%;&quot;&gt;Gradient&lt;/td&gt;
&lt;td style=&quot;width: 42.3395%;&quot;&gt;한 지점의 기울기 &amp;rArr; 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.7143%;&quot;&gt;Integrated Gradients&lt;/td&gt;
&lt;td style=&quot;width: 42.3395%;&quot;&gt;완정성 공리 만족&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.7143%;&quot;&gt;SHAP&lt;/td&gt;
&lt;td style=&quot;width: 42.3395%;&quot;&gt;공정하지만 느림&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient가 완전성을 만족 못하는 이유는 한 지점의 기울기만 보기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 경로를 보는 Integrated Gradients와 모든 조합을 보는 SHAP만 수학적으로 완전성을 보장한다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. Attribution 변형&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Gradient 기반 변형&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1) SmoothGrad&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;노이즈를 여러 번 추가해서 평균을 내자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Gradient의 문제는 픽셀 하나에 기울기를 한 번만 계산하기 때문에 히트맵이 너무 노이즈가 많고, 불안정하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SmoothGrad는 입력에 랜덤 노이즈를 n번 추가해서 기울기를 n번 계산하고 평균을 낸다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 Gradient : 이미지 한 장 &amp;rarr; 기울기 1번 계산&lt;/li&gt;
&lt;li&gt;SmoothGrad : 이미지 / 노이즈 50번 &amp;rarr; 기울기 50번 계산 = 평균&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daMjET/dJMcacweodq/PWZbdS7ZJOcyB8gaJR0G50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daMjET/dJMcacweodq/PWZbdS7ZJOcyB8gaJR0G50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daMjET/dJMcacweodq/PWZbdS7ZJOcyB8gaJR0G50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaMjET%2FdJMcacweodq%2FPWZbdS7ZJOcyB8gaJR0G50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;189&quot; height=&quot;79&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wIKFK/dJMcacQvcl1/k7ouVkfCeKgCg9MRk8KlG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wIKFK/dJMcacQvcl1/k7ouVkfCeKgCg9MRk8KlG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wIKFK/dJMcacQvcl1/k7ouVkfCeKgCg9MRk8KlG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwIKFK%2FdJMcacQvcl1%2Fk7ouVkfCeKgCg9MRk8KlG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;295&quot; height=&quot;149&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진을 한 장 찍으면 흔들릴 수 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;50장 찍어서 겹치면 흔들림이 사라지고 선명해지는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 노이즈가 평균내면서 상쇄되는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Grad-CAM++&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Grad-CAM보다 더 정확한 영역을 잡자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Grad-cAM의 문제 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 클래스 객체가 여러 개 있을 때 일부만 잡음&lt;/li&gt;
&lt;li&gt;큰 객체의 전체 영역을 못 잡음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM++는 기울기를 픽셀 단위로 가중치를 다르게 줘서 이 문제를 해결한다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). FullGrad&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;중간층의 기울기도 전부 포함하자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Gradient는 입력층 기울기만 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 딥러닝은 중간에 수많은 층이 있고, 각 층에서도 중요한 정보가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FullGrad는 입력층 + 모든 중간층의 기울기를 다 합산한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Perturbation 기반 변형&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Kernel SHAP&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;LIME의 허점을 SHAP으로 보완하자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME의 문제 : 근사 방식이 수학적으로 불안정해서 실행할 때마다 결과가 달라질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kernel SHAP은 LIME의 샘플링 방식에 SHAP의 가중치 계산을 결합해서 이 문제를 해결한다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LIME : 랜덤 샘플링 &amp;rarr; 근사 &amp;rarr; 불안정&lt;/li&gt;
&lt;li&gt;Kernel SHAP : SHAP 가중치 적용 &amp;rarr; 수학적으로 안정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHwe5U/dJMcahqLCpw/qDSlxWVsfLrKnzRwznf2jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHwe5U/dJMcahqLCpw/qDSlxWVsfLrKnzRwznf2jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHwe5U/dJMcahqLCpw/qDSlxWVsfLrKnzRwznf2jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHwe5U%2FdJMcahqLCpw%2FqDSlxWVsfLrKnzRwznf2jK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;188&quot; height=&quot;73&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작은 조합과 큰 조합에 높은 가중치&lt;/li&gt;
&lt;li&gt;중간 크기 조합에 낮은 가중치&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 극단적인 경우를 더 중요하게 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선수 기여도 측정할 때 &quot;혼자일 때&quot;와 &quot;전원일 때&quot;가 가장 중요하고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간 팀 구성은 덜 중요한 것처럼 극단적인 경우에 더 높은 가중치를 준다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Meaningful Perturbation&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;가리는 방식을 더 자연스럽게 하자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Occlusion의 문제 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;픽셀을 검은색으로 덮어버린다. 근데 이게 모델 입장에서 너무 부자연스럽다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Meaningful Perturbation은 픽셀을 블러(흐리게) 처리해서 더 자연스럽게 가린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 &quot;어느 영역을 가려야 출력이 가장 많이 변하나&quot;를 최적화 문제로 푼다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. Propagation 기반 변형&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). LRP (Layer-wise Relevance Propagation)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;출력에서 입력 방향으로 기여도를 역전파 하자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력값에서 시작하여 층을 거꾸로 거슬러 올라가며 기여도를 분배한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력 : 종양 확률 0.94&lt;/li&gt;
&lt;li&gt;최종 층 : 각 뉴런에 0.94를 분배&lt;/li&gt;
&lt;li&gt;중간층 : 받은 기여도를 다시 분배&lt;/li&gt;
&lt;li&gt;입력 층 : 최종 픽셀별 기여도&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 보존 법칙이라는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U7bcS/dJMcajaZG3H/zIKQ4DnmiK9VtfNFhrP75K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U7bcS/dJMcajaZG3H/zIKQ4DnmiK9VtfNFhrP75K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U7bcS/dJMcajaZG3H/zIKQ4DnmiK9VtfNFhrP75K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU7bcS%2FdJMcajaZG3H%2FzIKQ4DnmiK9VtfNFhrP75K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;168&quot; height=&quot;73&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래층에서 위 층으로 전달되는 기여도의 합 = 항상 일정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기여도가 사라지거나 생기지 않음&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Deep LIFT&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;기준점 대비 활성화 차이로 기여도를 계산하자&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Gradient의 문제 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화 함수(ReLU)가 0인 구간에서 기울기도 0이 돼버린다. &amp;rArr; 기여도 손실&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deep LIFT는 기울기 대신 &quot;기준점 대비 활성화 값의 차이&quot;로 기여도를 계산한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;163&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx9wft/dJMb990Aqcx/adDVxcUmbUxXMksKMiF6jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx9wft/dJMb990Aqcx/adDVxcUmbUxXMksKMiF6jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx9wft/dJMb990Aqcx/adDVxcUmbUxXMksKMiF6jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx9wft%2FdJMb990Aqcx%2FadDVxcUmbUxXMksKMiF6jk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;163&quot; height=&quot;58&quot; data-origin-width=&quot;163&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;Delta;y = f(x) - f(x`) : 실제 출력 - 기준 출력&lt;/li&gt;
&lt;li&gt;&amp;Delta;x = x - x : f(x) - f(x) : 실제 입력 - 기준 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 기울기 대신 차이로 계산하니까 ReLU=0가 되어 문제없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방 밝기(출력)가 바뀐 이류를 분석할 때, 기울기 방식은 &quot;지금 이 순간 스위치 민감도&quot;를 보는 거고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deep LIFT는 &quot;불 켜기 전후 밝기 차이'를 보는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스위치가 꺼져 있어도(ReLU=0) 차이는 측정할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 정리&amp;nbsp;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 88.4884%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;계열&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;방법&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;핵심 개선&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;단점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Gradient&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;SmoothGrad&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;노이즈 평균으로 안정화&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;느림 (n번 계산)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Gradient&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;Grad-CAM++&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;픽셀별 가중치로 정확도 향상&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;복잡한 계산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Gradient&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;Full Grad&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;전체 층 기울기 합산&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;메모리 많이 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Perturbation&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;Kernel SHAP&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;SHAP 가중치로 안정화&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;여전히 느림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Perturbation&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;Meaningful Pertubation&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;자연스러운 마스킹&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;최적화 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Perturbation&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;LRP&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;층별 역전파로 보존 법칙 만족&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;구조마다 규칙 다름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5116%;&quot;&gt;Perturbation&lt;/td&gt;
&lt;td style=&quot;width: 22.4419%;&quot;&gt;Deep LIFT&lt;/td&gt;
&lt;td style=&quot;width: 28.1395%;&quot;&gt;ReLU=0 문제 해결&lt;/td&gt;
&lt;td style=&quot;width: 21.3954%;&quot;&gt;기준점 선택 민감&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. 실습&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Grad-CAM 시각화&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 코드&lt;/h4&gt;
&lt;pre id=&quot;code_1777802992740&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ======================================================
# GradCAM 구현 (Google Colab용)
# 학습된 CNN이 이미지의 어느 영역을 보고 판단했는지 히트맵으로 시각화
# 데이터셋: MNIST (손글씨 숫자)
# ======================================================

# ── 1. 라이브러리 임포트 ────────────────────────────
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
import matplotlib.pyplot as plt
import numpy as np

DEVICE = torch.device(&quot;cuda&quot; if torch.cuda.is_available() else &quot;cpu&quot;)
print(f&quot;사용 디바이스: {DEVICE}&quot;)


# ── 2. 데이터 로드 ──────────────────────────────────
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize([0.5], [0.5])
])

dataset    = datasets.MNIST(root=&quot;./data&quot;, train=False, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)


# ── 3. CNN 분류 모델 정의 ────────────────────────────
# GradCAM은 학습된 CNN 모델에 적용하는 것
# 먼저 CNN 분류기를 학습시키고, 그 모델에 GradCAM 적용
class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()

        # 특징 추출부 (Conv 층) - GradCAM이 이 부분을 분석
        self.features = nn.Sequential(
            # 28x28 &amp;rarr; 14x14
            nn.Conv2d(1, 32, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),

            # 14x14 &amp;rarr; 7x7
            nn.Conv2d(32, 64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
        )

        # 분류부 (Linear 층)
        self.classifier = nn.Sequential(
            nn.Linear(64 * 7 * 7, 128),
            nn.ReLU(),
            nn.Linear(128, 10)   # 0~9 클래스
        )

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), -1)
        return self.classifier(x)


# ── 4. 모델 학습 ────────────────────────────────────
train_dataset = datasets.MNIST(root=&quot;./data&quot;, train=True, download=True, transform=transform)
train_loader  = torch.utils.data.DataLoader(train_dataset, batch_size=128, shuffle=True)

model     = SimpleCNN().to(DEVICE)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

print(&quot;CNN 학습 시작...&quot;)
for epoch in range(5):
    for imgs, labels in train_loader:
        imgs, labels = imgs.to(DEVICE), labels.to(DEVICE)
        optimizer.zero_grad()
        loss = criterion(model(imgs), labels)
        loss.backward()
        optimizer.step()
    print(f&quot;Epoch {epoch+1}/5 완료&quot;)

print(&quot;CNN 학습 완료!&quot;)
model.eval()


# ── 5. GradCAM 구현 ─────────────────────────────────
# GradCAM 핵심 원리:
# ① 특정 층의 특징맵(feature map)을 저장
# ② 출력에 대한 특징맵의 기울기를 저장
# ③ 기울기의 평균 &amp;rarr; 특징맵에 가중치로 적용
# ④ 히트맵 생성

class GradCAM:
    def __init__(self, model, target_layer):
        self.model        = model
        self.target_layer = target_layer
        self.gradients    = None   # 기울기 저장
        self.activations  = None   # 특징맵 저장

        # Hook: 특징맵과 기울기를 자동으로 저장
        target_layer.register_forward_hook(self._save_activation)
        target_layer.register_backward_hook(self._save_gradient)

    def _save_activation(self, module, input, output):
        # 순전파 시 특징맵 저장
        self.activations = output.detach()

    def _save_gradient(self, module, grad_input, grad_output):
        # 역전파 시 기울기 저장
        self.gradients = grad_output[0].detach()

    def generate(self, img, class_idx=None):
        # ① 순전파
        output = self.model(img)

        # ② 타겟 클래스 결정 (없으면 가장 높은 확률 클래스)
        if class_idx is None:
            class_idx = output.argmax(dim=1).item()

        # ③ 역전파 (타겟 클래스에 대해)
        self.model.zero_grad()
        output[0, class_idx].backward()

        # ④ 기울기 평균 &amp;rarr; 채널별 가중치
        weights = self.gradients.mean(dim=[2, 3], keepdim=True)  # (1, C, 1, 1)

        # ⑤ 특징맵에 가중치 적용 후 합산
        cam = (weights * self.activations).sum(dim=1, keepdim=True)  # (1, 1, H, W)

        # ⑥ ReLU 적용 (양수 기여만 남김)
        cam = torch.relu(cam)

        # ⑦ 0~1 정규화
        cam -= cam.min()
        cam /= cam.max() + 1e-8

        return cam.squeeze().cpu().numpy(), class_idx


# ── 6. 시각화 함수 ──────────────────────────────────
def show_gradcam(model, gradcam, dataloader, num=8):
    imgs, labels = next(iter(dataloader))
    imgs, labels = imgs[:num].to(DEVICE), labels[:num]

    fig, axes = plt.subplots(3, num, figsize=(num * 2, 6))

    for i in range(num):
        img       = imgs[i:i+1]
        label     = labels[i].item()
        cam, pred = gradcam.generate(img)

        # 원본 이미지
        orig = img.squeeze().cpu().numpy()
        orig = (orig + 1) / 2   # [-1,1] &amp;rarr; [0,1]

        # GradCAM 히트맵을 원본 크기로 리사이즈
        cam_resized = torch.tensor(cam).unsqueeze(0).unsqueeze(0)
        cam_resized = torch.nn.functional.interpolate(
            cam_resized, size=(28, 28), mode='bilinear', align_corners=False
        ).squeeze().numpy()

        # 원본 이미지
        axes[0, i].imshow(orig, cmap='gray')
        axes[0, i].set_title(f&quot;정답: {label}&quot;, fontsize=9)
        axes[0, i].axis('off')

        # GradCAM 히트맵
        axes[1, i].imshow(cam_resized, cmap='jet')
        axes[1, i].set_title(f&quot;예측: {pred}&quot;, fontsize=9)
        axes[1, i].axis('off')

        # 원본 + 히트맵 오버레이
        axes[2, i].imshow(orig, cmap='gray')
        axes[2, i].imshow(cam_resized, cmap='jet', alpha=0.5)
        axes[2, i].set_title(&quot;오버레이&quot;, fontsize=9)
        axes[2, i].axis('off')

    axes[0, 0].set_ylabel(&quot;원본&quot;, fontsize=10)
    axes[1, 0].set_ylabel(&quot;GradCAM&quot;, fontsize=10)
    axes[2, 0].set_ylabel(&quot;오버레이&quot;, fontsize=10)

    plt.suptitle(&quot;GradCAM 시각화 &amp;mdash; 빨간 영역 = AI가 집중한 곳&quot;, fontsize=12)
    plt.tight_layout()
    plt.show()


# ── 7. GradCAM 실행 ─────────────────────────────────
# 마지막 Conv 층에 GradCAM 적용
target_layer = model.features[3]   # 두 번째 Conv2d 층
gradcam      = GradCAM(model, target_layer)

show_gradcam(model, gradcam, dataloader, num=8)


# ── 8. 특정 숫자만 골라서 GradCAM 보기 ─────────────
def show_gradcam_single(digit):
    &quot;&quot;&quot;특정 숫자에 대한 GradCAM만 시각화&quot;&quot;&quot;
    for imgs, labels in dataloader:
        idx = (labels == digit).nonzero(as_tuple=True)[0]
        if len(idx) == 0:
            continue
        img   = imgs[idx[0]:idx[0]+1].to(DEVICE)
        label = labels[idx[0]].item()
        break

    cam, pred = gradcam.generate(img)
    orig      = img.squeeze().cpu().numpy()
    orig      = (orig + 1) / 2

    cam_resized = torch.tensor(cam).unsqueeze(0).unsqueeze(0)
    cam_resized = torch.nn.functional.interpolate(
        cam_resized, size=(28, 28), mode='bilinear', align_corners=False
    ).squeeze().numpy()

    fig, axes = plt.subplots(1, 3, figsize=(9, 3))
    axes[0].imshow(orig, cmap='gray');       axes[0].set_title(f&quot;원본: {label}&quot;); axes[0].axis('off')
    axes[1].imshow(cam_resized, cmap='jet'); axes[1].set_title(f&quot;GradCAM&quot;);       axes[1].axis('off')
    axes[2].imshow(orig, cmap='gray')
    axes[2].imshow(cam_resized, cmap='jet', alpha=0.5)
    axes[2].set_title(&quot;오버레이&quot;);            axes[2].axis('off')

    plt.suptitle(f&quot;숫자 {digit} &amp;mdash; AI가 집중한 영역&quot;, fontsize=12)
    plt.tight_layout()
    plt.show()

# 사용 예시
# show_gradcam_single(7)   # 숫자 7에 대한 GradCAM
# show_gradcam_single(0)   # 숫자 0에 대한 GradCAM&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 결과&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Mltm/dJMcagMawbK/CQgdCt9vlkGw3xncO3FJl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Mltm/dJMcagMawbK/CQgdCt9vlkGw3xncO3FJl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Mltm/dJMcagMawbK/CQgdCt9vlkGw3xncO3FJl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Mltm%2FdJMcagMawbK%2FCQgdCt9vlkGw3xncO3FJl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;263&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵이 거의 전부 파란색이 나오는 문제점이 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 원인 - 마지막 Conv 층이 너무 작음&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지금 Grad-CAM을 두 번째 Conv 층 (7x7)에 적용하고 있다.&lt;/li&gt;
&lt;li&gt;7x7 특징맵을 28x28로 다시 키우면 너무 뭉개져서 히트맵이 작은 점으로만 나오는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 해결책 - 첫 번째 Conv 층으로 변경&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). 수정&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cir6bV/dJMcaaZrQAf/DymfRL7c0Bg4rJyrsNv12K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cir6bV/dJMcaaZrQAf/DymfRL7c0Bg4rJyrsNv12K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cir6bV/dJMcaaZrQAf/DymfRL7c0Bg4rJyrsNv12K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcir6bV%2FdJMcaaZrQAf%2FDymfRL7c0Bg4rJyrsNv12K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;699&quot; height=&quot;250&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵이 숫자 획을 따라 잘 나왔다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. 한계&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 불안정성 (Instability)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 이미지에 입력을 아주 조금만 바꿔도 Attribution 결과가 크게 달라진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원본 이미지 &amp;rArr; 히트맵 A&lt;/li&gt;
&lt;li&gt;픽셀 하나만 변경 &amp;rArr; 히트맵 B (완전히 다름)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 기준점 민감성 (Baseline Sensitivity)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Integrated Gradients, SHAP 같은 방법은 기준점을 뭘로 설정하냐에 따라 결과가 달라진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기준점 = 검은 이미지 &amp;rArr; 히트맵 A&lt;/li&gt;
&lt;li&gt;기준점 = 흰 이미지 &amp;rArr; 히트맵 B&lt;/li&gt;
&lt;li&gt;기준점 = 흐린 이미지 &amp;rArr; 히트맵 C&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답이 되는 기준점이 없어서 연구자마다 다른 기준점을 써서 결과가 달라질 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 설명과 모델 동작의 불일치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution이 보여주는 히트맵이 실제로 모델이 판단한 근거와 다를 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;히트맵 : &quot;이 영역을 보고 판단했어&quot;&lt;/li&gt;
&lt;li&gt;실제 : 모델 내부에서 전혀 다른 패턴으로 판단했을 수도 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 계산 비용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법마다 계산 비용이 크게 달라진다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gradient : 빠르지만 기울기 한 번 계산&lt;/li&gt;
&lt;li&gt;GradCAM : 빠르지만 특정 층만 분석&lt;/li&gt;
&lt;li&gt;SHAP : 모든 조합을 계산해서 느림&lt;/li&gt;
&lt;li&gt;Integrated Gradients : 여러 번 적분해서 중간 속도이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 SHAP은 이미지처럼 픽셀 수가 많으면 계산량이 폭발적으로 증가한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 평가 기준 부재&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution 결과가 얼마나 정확한지 객관적으로 평가할 방법이 없다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GAN : Loss 값으로 어느 정도 판단 가능&lt;/li&gt;
&lt;li&gt;Attribution : &amp;ldquo;이 히트맵이 맞냐 틀리냐&amp;rdquo;를 측정하는 기준이 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 결국 사람눈으로 판단해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution은 XAI 기법들이 공통적으로 추구하는 목표다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;각 입력 특성이 예측에 얼마나 기여했는가?&quot;를 구하는 것이 Attribution이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP, LIME, Grad-CAM, Gradient 등의 기법들은 이 목표를 각자의 방식으로 달성하려는 시도들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기법들의 차이는 접근 방식에 있다. SHAP은 게임이론 기반으로 수학적으로 공정하게 기여도를 분배하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME은 주변을 근사 모델로 흉내 내 국소적으로 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient 계열은 입력 변화에 출력이 얼마나 민감하 진 지를 보고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM은 이를 공간적으로 시각화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribution의 공리들-완전성, 더미, 대칭성 등은 단순한 이론적 조건이 아니라 기법들을 평가하는 실질적인 기준이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP이 이론적으로 가장 탄탄하다고 평가받는 이유가 이 공리들을 모두 만족하기 때문이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM++이 Grad-CAM 이후에 등장한 이유도 완전성 공리를 만족하지 못하는 문제를 보완하기 위해서였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 Attribution은 기법들의 존재 이유이자, 기법들을 평가하는 기준이다.&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/AI</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/28</guid>
      <comments>https://perry03.tistory.com/28#entry28comment</comments>
      <pubDate>Sun, 3 May 2026 19:24:03 +0900</pubDate>
    </item>
    <item>
      <title>XAI 기법 - SHAP</title>
      <link>https://perry03.tistory.com/27</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[0]. SHAP (Shapley Additive Explanations)란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 이론의 샤플리 값을 활용한 기법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 모델의 예측 결과를 각 피처(특징)의 기여도로 분해하여 설명하는 XAI 기법이다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. SHAP이 필요한 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 &quot;악성 종양, 확률 98%&quot;라고 했을 때&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왜 그 결론인가?&lt;/li&gt;
&lt;li&gt;어떤 요소가 결정적이었나?&lt;/li&gt;
&lt;li&gt;틀렸을 때 어디서 잘못됐나?&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 답하는 것이 XAI, 그중 Feature Attribution 계열의 대표가 SHAP이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Feature Attribution이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측값 = 기준값 + 피처1 기여 + 피처 2 기여 + ... + 피처 n 기여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 각 피처가 예측에 얼마나, 어느 방향으로 기여했는지 수치로 분해하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 각 피처의 기여도를 어떻게 측정해야 공정할까?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 공정한 기여도란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 접근의 문제이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 방법 1 : 피처 하나씩 제거하고 예측 변화 측정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 요리사가 &quot;이 재료가 맛에 얼마나 기여했나?&quot;를 알려고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재료를 하나씩 빼서 맛을 비교하는 것이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(소금, 설탕, 후추) = 0.82&lt;/li&gt;
&lt;li&gt;f(설탕, 후추) = 0.61 &amp;rArr; 소금 기여 = +0.21&lt;/li&gt;
&lt;li&gt;f(소금, 후추) = 0.74 &amp;rArr; 설탕 기여 = +0.08&lt;/li&gt;
&lt;li&gt;f(소금, 설탕) = 0.79 &amp;rArr; 후추 기여 = +0.03&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 합계 : 0.21 + 0.08 + 0.03 = 0.32&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 피처 간 상호작용이 존재하면, 어떤 피처를 먼저 제거하느냐에 따라 기여도가 달라진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소금 단독제거 기여도 = +0.21&lt;/li&gt;
&lt;li&gt;설탕 먼저 빠진 상태에서 소금 제거 기여도 = +0.30 (다른 값)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;진짜 기여도&quot;가 없다. 순서 의존적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 모든 순서를 동등하게 고려하는 Shapley Value가 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{3}. Shapley Value : 게임 이론에서의 해답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1). 협력 게임 - Shapley 개념&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기여도에 따른 공정한 분배 문제다. 3명(A, B, C)이 협력해서 300만원을 벌었다. 단순히 N분의 1로 나누면 불공평하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 많이 기여한 사람이 더 가져가야 한다. 그렇다면 각자의 기여도를 어떻게 측정하는가?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A = 60&lt;/li&gt;
&lt;li&gt;B = 80&lt;/li&gt;
&lt;li&gt;C = 50&lt;/li&gt;
&lt;li&gt;A, B = 180&lt;/li&gt;
&lt;li&gt;A, C 140&lt;/li&gt;
&lt;li&gt;B, C = 160&lt;/li&gt;
&lt;li&gt;A, B, C = 300&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 단순히 단독 기여(60:80:50)로 나누면 불공정하다. 연합 효과를 고려해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2). Shapley의 해법 : 모든 순서에서의 평균 한계 기여도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예시를 들고 와서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3명(A, B, C)이 협력해서 300만원을 벌었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자에게 공정하게 얼마를 줘야 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 팀 프로젝트에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A, B, C 세명이 프리랜서로 함께 프로젝트를 수주했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자서 하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A = 60만 원짜리 프로젝트밖에 못 받음&lt;/li&gt;
&lt;li&gt;B = 80만 원&lt;/li&gt;
&lt;li&gt;C = 50&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;협력하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A + B = 180 (시너지 발생)&lt;/li&gt;
&lt;li&gt;A + C = 140&lt;/li&gt;
&lt;li&gt;B + C = 160&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 같이 하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A + B + C = 300&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 &amp;ldquo;혼자일 때 기여도 비율(60:80:50)로 나누면 불공정하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; A와 B가 만나면 시너지가 터지는데, 그 공을 누구에게?&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). Shapley의 아이디어 : 합류 순서를 바꿔가며 실험해 보자&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀에 한 명씩 순서대로 합류한다고 가정하자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 합류하는 순간, 팀 수익이 얼마나 올랐는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 나의 &quot;그 순서에서의 기여도&quot;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 가능한 모든 합류 순서에 대해 평균을 낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3명이니까 합류 순서의 경우의 수 = 3! = 6가지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. A의 Shapley Value&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-1. A &amp;rarr; B &amp;rarr; C&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[빈 팀] &amp;rarr; A 합류 &amp;rarr; B 합류 &amp;rarr; C 합류&lt;/li&gt;
&lt;li&gt;A가 들어올 때 팀에 아무도 없음&lt;/li&gt;
&lt;li&gt;&amp;rArr; A 혼자서 벌 수 있는 돈 = 60만 원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-2. A &amp;rarr; C &amp;rarr; B&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[빈 팀] &amp;rarr; A 합류 &amp;rarr; C 합류 &amp;rarr; B 합류&lt;/li&gt;
&lt;li&gt;1과 같은 상황으로&lt;/li&gt;
&lt;li&gt;&amp;rArr; A 기여도 = 60만 원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-3. B &amp;rarr; A &amp;rarr; C&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[빈 팀] &amp;rarr; B 합류 &amp;rarr; A 합류 &amp;rarr; C 합류&lt;/li&gt;
&lt;li&gt;A가 들어올 때 팀에 B가 이미 있음&lt;/li&gt;
&lt;li&gt;B만 있을 때 수입 = 80만 원&lt;/li&gt;
&lt;li&gt;A + B가 함께일 때 수익 = 180&lt;/li&gt;
&lt;li&gt;A가 들어오면서 수익이 +100만 원이 오름&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-4. C &amp;rarr; A &amp;rarr; B&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[빈 팀] &amp;rarr; C 합류 &amp;rarr; A 합류 &amp;rarr; B 합류&lt;/li&gt;
&lt;li&gt;A가 들어올 때 팀에 C가 이미 있음&lt;/li&gt;
&lt;li&gt;C만 있을 때 수익 = 50만 원&lt;/li&gt;
&lt;li&gt;A+C가 함께일 때 수익 = 140만 원&lt;/li&gt;
&lt;li&gt;A가 들어오면서 수익이 90만 원이 오름&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-5. B &amp;rarr; C &amp;rarr; A&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[빈 팀] &amp;rarr; B 합류 &amp;rarr; C 합류 &amp;rarr; A 합류&lt;/li&gt;
&lt;li&gt;A가 들어올 때 팀에 B, C가 이미 다 있음&lt;/li&gt;
&lt;li&gt;B+C만 있을 때 수익 = 160만 원&lt;/li&gt;
&lt;li&gt;A+B+C 다 있으면 수익 = 300만 원&lt;/li&gt;
&lt;li&gt;A가 들어오면서 수익이 140만 원이 오름&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-6. C &amp;rarr; B &amp;rarr; A&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[빈 팀] &amp;rarr; C 합류 &amp;rarr; B 합류 &amp;rarr; A 합류&lt;/li&gt;
&lt;li&gt;A가 들어올 때 팀에 C, B 다 있음&lt;/li&gt;
&lt;li&gt;A 기여도 140만원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 A를 기준으로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1, 2의 경우 빈 팀에 혼자 들어가기 때문에 A의 기여도는 60이다.&lt;/li&gt;
&lt;li&gt;3의 경우는 B가 있는 팀에 합류를 했기 때문에 기여도가 100이다&lt;/li&gt;
&lt;li&gt;4의 경우는 C가 있는 팀에 합류해서 기여도는 90이고,&lt;/li&gt;
&lt;li&gt;5, 6의 경우 B, C가 다 있는 팀에 합류해서 기여도가 140이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;팀이 약할 때 들어가면 A의 기여도는 작게 측정&lt;/li&gt;
&lt;li&gt;팀이 강할 때 들어가면 A의 기여도 크게 측정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 6가지를 전부 평균내면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A = (60 + 60 + 100 + 90 + 140 + 140) / 6 하면 300만 원 중 A가 가져갈 돈은 98.3만 원이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 방식으로 B, C도 계산하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B = 108.3만 원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C = 93.3만 원이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증을 하면 98.3 + 108.3 + 93.3 = 300이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유리한 순서(빈 팀)도, 불리한 순서(꽉 찬 팀)도 모두 동등하게 고려해서 평균을 냈기 때문에 공정하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2]. SHAP 수식 완전 분해&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhsEmP/dJMcai4b7na/tswrykpW9d89DIv9qGHVE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhsEmP/dJMcai4b7na/tswrykpW9d89DIv9qGHVE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhsEmP/dJMcai4b7na/tswrykpW9d89DIv9qGHVE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhsEmP%2FdJMcai4b7na%2FtswrykpW9d89DIv9qGHVE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;70&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP의 수식은 위와 같다. 이걸 세 개의 덩어리로 쪼개면 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br68QD/dJMcabxgVdH/f90fZfZsGoEWjFtmLgilS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br68QD/dJMcabxgVdH/f90fZfZsGoEWjFtmLgilS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br68QD/dJMcabxgVdH/f90fZfZsGoEWjFtmLgilS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr68QD%2FdJMcabxgVdH%2Ff90fZfZsGoEWjFtmLgilS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;93&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;덩어리 1 : 이 상황이 나올 확률 (가중치)&lt;/li&gt;
&lt;li&gt;덩어리 2 : 이 상황에서 피처 i의 기여도&lt;/li&gt;
&lt;li&gt;전체 수식 = &amp;ldquo;각 상황의 기여도 x 그 상황이 나올 확률&amp;rdquo;의 합계&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 가중 평균이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 덩어리 분석&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 덩어리 2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;덩어리 2를 먼저 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;143&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cF4hcZ/dJMcafT0ELX/jT1dNBPY5FxDlptVwUWGwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cF4hcZ/dJMcafT0ELX/jT1dNBPY5FxDlptVwUWGwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cF4hcZ/dJMcafT0ELX/jT1dNBPY5FxDlptVwUWGwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcF4hcZ%2FdJMcafT0ELX%2FjT1dNBPY5FxDlptVwUWGwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;143&quot; height=&quot;64&quot; data-origin-width=&quot;143&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(S U {i}) : 피처 i를 포함한 집합으로 예측한 값&lt;/li&gt;
&lt;li&gt;f(S) : 피처 i를 빼고 예측한 값&lt;/li&gt;
&lt;li&gt;차이 = i가 합류했을 때 수익 변화 = i의 한계 기여도&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 이론 예시로 보면 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S = {B}, i = A 라면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(S U {A}) = f({A, B}) = 180만 원&lt;/li&gt;
&lt;li&gt;f(S) = f({B}) = 80만 원&lt;/li&gt;
&lt;li&gt;차이 = +100만 원 &amp;rArr; A가 B 팀에 합류했을 때 기여도&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 덩어리 1 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmvEy7/dJMcaaLV1Sd/zpg7BBRmgCY8cEnDTRpOKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmvEy7/dJMcaaLV1Sd/zpg7BBRmgCY8cEnDTRpOKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmvEy7/dJMcaaLV1Sd/zpg7BBRmgCY8cEnDTRpOKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmvEy7%2FdJMcaaLV1Sd%2Fzpg7BBRmgCY8cEnDTRpOKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;153&quot; height=&quot;75&quot; data-origin-width=&quot;153&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식이 어렵게 생겼지만 결국 하나의 질문에 대한 답이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;집합 S가 이미 있고, 다음에 i가 합류하는 순열이 전체 순열 중 몇 % 인가?&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유 : 줄 세우기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F = {A , B, C} 3명을 일렬로 세우는 경우의 수 = 3! = 6가지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;B가 이미 있고 (S={B}), 그다음에 A가 합류&amp;rdquo;하는 경우가 몇 가지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 순열 6가지 중에 B-A-C가 해당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6가지 중 1 가지 이므로 확률은 1/6이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식으로 계산하면 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;|S| = 1 (B 한 명)&lt;/li&gt;
&lt;li&gt;|F| = 3 (전체 3명)&lt;/li&gt;
&lt;li&gt;i = A&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6zNqg/dJMcaaZruuY/53oAGpHeFBK9LMrktpL7T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6zNqg/dJMcaaZruuY/53oAGpHeFBK9LMrktpL7T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6zNqg/dJMcaaZruuY/53oAGpHeFBK9LMrktpL7T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6zNqg%2FdJMcaaZruuY%2F53oAGpHeFBK9LMrktpL7T0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;523&quot; height=&quot;82&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;|S|! : S 안의 멤버들이 i 보다 먼저 줄 서는 경우의 수&lt;/li&gt;
&lt;li&gt;(|F| - |S| - 1)! : i 이후 나머지가 줄 서는 경우의 수&lt;/li&gt;
&lt;li&gt;|F|! : 전체 순열 수&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 수식 정리&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k5zIe/dJMcaiQGxAH/d89JPjkqu3ia9ymkKOMD91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k5zIe/dJMcaiQGxAH/d89JPjkqu3ia9ymkKOMD91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k5zIe/dJMcaiQGxAH/d89JPjkqu3ia9ymkKOMD91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk5zIe%2FdJMcaiQGxAH%2Fd89JPjkqu3ia9ymkKOMD91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;76&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 모든 가능한 합류 상황에서, i의 기여도를 확률로 가중 평균한 값&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. 수학적 공리 4가지 (SHAP의 정당성)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{0}. 공리가 왜 필요한가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 공리란&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학, 논리학 등 이론 체계에서 증명 없이 자명한 진리로 받아들여지는 가장 기초적인 그건가 되는 명제라는 뜻인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증명 없이 당연하게 받아들이는 전제 조건이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HSP이 공정하다는 말을 그냥 믿을 수는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학적으로 증명 가능한 조건을 만족해야 공정하다고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효율성, 대칭성, 더미, 가산성 이 4가지를 동시에 만족하는 feature attribution 방법은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shapley Value가 유일하다는 게 수학적으로 증명되어 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 효율성 (Efficiency)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd2mwe/dJMcacprqDt/umgVwQokztPYNP4kDm0TD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd2mwe/dJMcacprqDt/umgVwQokztPYNP4kDm0TD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd2mwe/dJMcacprqDt/umgVwQokztPYNP4kDm0TD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd2mwe%2FdJMcacprqDt%2FumgVwQokztPYNP4kDm0TD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;188&quot; height=&quot;70&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 피처의 SHAP 값을 더하면 정확히 예측값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기여도가 누락되거나 중복되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 영수증을 생각해 보자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴 A, B, C를 시켰을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 메뉴 가격의 합 = 총금액이 정확히 맞아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1원이라도 모자라거나 넘치면 잘못된 계산서이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 대칭성 (Symmetry)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대칭성의 조건은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피처 i와 j가 모든 연합에서 동일한 기여를 하면 SHAP 값도 같다는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FesLS/dJMcafGtCTl/IDcQkkDX2d26f99wMtixs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FesLS/dJMcafGtCTl/IDcQkkDX2d26f99wMtixs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FesLS/dJMcafGtCTl/IDcQkkDX2d26f99wMtixs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFesLS%2FdJMcafGtCTl%2FIDcQkkDX2d26f99wMtixs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;48&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 기여가 같으면 같은 보상을 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피처 이름이나 순서 때문에 차별받지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 직원이 매번 똑같은 성과를 냈다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름이 &quot;김&quot;이든 &quot;이&quot;든 연봉이 같아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름 순서로 차별하면 불공정하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 더피 (Dummy)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더미의 조건은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피처 i가 어떤 연합에 추가되어도 예측값이 변하지 않으면 SHAP의 값은 0이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwnZ0V/dJMcac30R6l/nhPBFm26bc06O797wvBsq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwnZ0V/dJMcac30R6l/nhPBFm26bc06O797wvBsq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwnZ0V/dJMcac30R6l/nhPBFm26bc06O797wvBsq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwnZ0V%2FdJMcac30R6l%2FnhPBFm26bc06O797wvBsq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;356&quot; height=&quot;49&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;49&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 기여도 안 한 피처는 책임(기여도)도 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀 프로젝트에서 아무것도 안 한 팀원에게&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수익을 나눠줄 이유가 없다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 가산성 (additivity)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가산성의 조건은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 모델을 합친 모델의 SHAP는 각 모델의 SHAP의 합이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bszyOj/dJMcab47SNY/NnzkiV7POV6FYXLziHUW81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bszyOj/dJMcab47SNY/NnzkiV7POV6FYXLziHUW81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bszyOj/dJMcab47SNY/NnzkiV7POV6FYXLziHUW81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbszyOj%2FdJMcab47SNY%2FNnzkiV7POV6FYXLziHUW81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;241&quot; height=&quot;42&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 합쳐도 SHAP 값이 일관성 있게 유지된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 팀이 각자 번 돈을 합쳐서 공동 수익으로 만들었을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자의 기여도도 단순히 합산하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합치는 과정에서 기여도가 뒤바뀌거나 왜곡되지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 정리&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 67.2093%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;공리&lt;/td&gt;
&lt;td style=&quot;width: 27.5194%;&quot;&gt;핵심 한 줄&lt;/td&gt;
&lt;td style=&quot;width: 27.5193%;&quot;&gt;위반하면?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;효율성&lt;/td&gt;
&lt;td style=&quot;width: 27.5194%;&quot;&gt;모든 SHAP 합 = 예측값&lt;/td&gt;
&lt;td style=&quot;width: 27.5193%;&quot;&gt;기여도 합산이 예측값과 안 맞음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;대칭성&lt;/td&gt;
&lt;td style=&quot;width: 27.5194%;&quot;&gt;기여도가 같으면 SHAP이 같음&lt;/td&gt;
&lt;td style=&quot;width: 27.5193%;&quot;&gt;이름/순서로 차별 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;더미&lt;/td&gt;
&lt;td style=&quot;width: 27.5194%;&quot;&gt;기여도 없으면 SHAP = 0&lt;/td&gt;
&lt;td style=&quot;width: 27.5193%;&quot;&gt;무관한 피처가 기여도 가져감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;가산성&lt;/td&gt;
&lt;td style=&quot;width: 27.5194%;&quot;&gt;합친 모델도 일관성 유지&lt;/td&gt;
&lt;td style=&quot;width: 27.5193%;&quot;&gt;앙상블에서 SHAP 신뢰 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. f(s) 계산 문제 - 피처 일부만 쓴다는 게 뭔가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델은 원래 3개 피처를 전부 받아야 작동한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(소금, 설탕, 후추) = 예측값&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 Shapley 계산 중 &quot;소금 피처만 있는 상황&quot;을 만들어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 나머지 2개를 어떻게 채우나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 성적 예측으로 비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선생님이 &quot;공부시간, 수면시간, 컨디션&quot; 3가지로 성적을 예측하는 공식을 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 어떤 학생의 수면 시간 정보가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 선생님은 &quot;모르면 일단 반 평균 수면시간을 넣자&quot;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP이 하는 게 정확히 이것이다. 값이 없으면 평균으로 대체한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 없는 피처 = 평균값으로 대체&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 53.7209%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8605%;&quot;&gt;계산해야 하는 상황&lt;/td&gt;
&lt;td style=&quot;width: 31.8604%;&quot;&gt;실제 모델에 넣는 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8605%;&quot;&gt;소금크기만 있을 때&lt;/td&gt;
&lt;td style=&quot;width: 31.8604%;&quot;&gt;f(소금=실제, 설탕=평균, 후추=평균)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8605%;&quot;&gt;설탕만 있을 때&lt;/td&gt;
&lt;td style=&quot;width: 31.8604%;&quot;&gt;f(소금=평균, 설탕=실제, 후추=평균)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8605%;&quot;&gt;아무것도 없을 때&lt;/td&gt;
&lt;td style=&quot;width: 31.8604%;&quot;&gt;f(평균, 평균, 평균)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 피처 정보가 없다 =피처에 대해 아무것도 모른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무것도 모를 때 가장 무난한 추측 = 평균&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피처끼리 상관관계가 있으면 &quot;나이가 많을수록 종양도 크다&quot; 평균 대체가 현실에 없는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상한 조합을 만들어낼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 SHAP의 고질적인 한계 중 하나이다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. 계산 복잡도 문제와 변형 알고리즘&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 왜 복잡함?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shapley Value는 모든 피처 조합을 다 계산해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피처가 n개면 조합 수는 2^n가지이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 27.5582%; height: 82px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.3163%;&quot;&gt;피처 수&lt;/td&gt;
&lt;td style=&quot;width: 29.2377%;&quot;&gt;조합후&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.3163%;&quot;&gt;3개&lt;/td&gt;
&lt;td style=&quot;width: 29.2377%;&quot;&gt;8가지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.3163%;&quot;&gt;30개&lt;/td&gt;
&lt;td style=&quot;width: 29.2377%;&quot;&gt;1,073,741,824가지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음식 재료 30개가 있고, &quot;각 재료가 맛이 얼마나 기여했나?&quot;를 알고 싶다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완벽하게 하려면 가능한 모든 재료 조합으로 요리를 만들어서 맛을 비교해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30개 재료면 10억 번 요리를 해야 하는데 현실적으로 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &quot;완벽한 계산&quot;대신 &quot;빠르고 합리적인 근사&quot; 방법들이 등장했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 변형 알고리즘들&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Kernel SHAP - 랜덤 샘플링으로 때려잡기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10억 번 요리 대신, 랜덤 하게 1000번만 요리해서 평균을 내는 것,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완벽하진 않지만 충분히 정확하고, 훨씬 빠르다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 조합 대신 랜덤하게 일부 조합만 샘플링&lt;/li&gt;
&lt;li&gt;샘플링한 결과로 선형 회귀를 돌려 기여도 근사&lt;/li&gt;
&lt;li&gt;모델 종류 무관(블랙박스도 가능)&lt;/li&gt;
&lt;li&gt;단점 : 여전히 느림 샘플 수가 적으면 부정확&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Tree SHAP - 트리 구조를 그대로 이용&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요리 레시피가 의사결정 순서도(트리) 형태롤 딱 정해져 있다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10억 번 요리 안 해도 순서도만 따라가면 기여도를 정확히 계산할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트리 기반 모델(XGBoost, Random Forest 등) 전용&lt;/li&gt;
&lt;li&gt;트리 구조를 수학적으로 분석해서 정확한 값을 빠르게 계산&lt;/li&gt;
&lt;li&gt;시간복잡도: 2^n : O(T x L x D^2) (T = 트리 수, L = 리프 수, D = 깊이)&lt;/li&gt;
&lt;li&gt;현재 가장 많이 쓰는 SHAP 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). Deep SHAP - 딥러닝 레이어를 역추적&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 공장 생산라인에서 &quot;어떤 공정이 불량에 기여했나?&quot;를 알려고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 다시 돌리는 게 아니라 역순으로 라인을 거슬러 올라가며 추적하는 것이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;딥러닝 모델 전용&lt;/li&gt;
&lt;li&gt;역전파 방향으로 기여도를 추적&lt;/li&gt;
&lt;li&gt;빠르지만 근삿값이기 때문에 완벽하지 않음&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 정리&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 66.8605%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.814%;&quot;&gt;알고리즘&lt;/td&gt;
&lt;td style=&quot;width: 18.372%;&quot;&gt;비유&lt;/td&gt;
&lt;td style=&quot;width: 11.9768%;&quot;&gt;적용 모델&lt;/td&gt;
&lt;td style=&quot;width: 8.60464%;&quot;&gt;속도&lt;/td&gt;
&lt;td style=&quot;width: 12.0931%;&quot;&gt;정확도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.814%;&quot;&gt;정확한 Shapley&lt;/td&gt;
&lt;td style=&quot;width: 18.372%;&quot;&gt;10억 번 전부 요리&lt;/td&gt;
&lt;td style=&quot;width: 11.9768%;&quot;&gt;모두&lt;/td&gt;
&lt;td style=&quot;width: 8.60464%;&quot;&gt;느림&lt;/td&gt;
&lt;td style=&quot;width: 12.0931%;&quot;&gt;완벽&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.814%;&quot;&gt;Kernel SHAP&lt;/td&gt;
&lt;td style=&quot;width: 18.372%;&quot;&gt;랜덤 1000번 요리&lt;/td&gt;
&lt;td style=&quot;width: 11.9768%;&quot;&gt;모두&lt;/td&gt;
&lt;td style=&quot;width: 8.60464%;&quot;&gt;보통&lt;/td&gt;
&lt;td style=&quot;width: 12.0931%;&quot;&gt;근사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.814%;&quot;&gt;Tree SHAP&lt;/td&gt;
&lt;td style=&quot;width: 18.372%;&quot;&gt;레시피 순서도 분석&lt;/td&gt;
&lt;td style=&quot;width: 11.9768%;&quot;&gt;트리 계열&lt;/td&gt;
&lt;td style=&quot;width: 8.60464%;&quot;&gt;빠름&lt;/td&gt;
&lt;td style=&quot;width: 12.0931%;&quot;&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.814%;&quot;&gt;Deep SHAP&lt;/td&gt;
&lt;td style=&quot;width: 18.372%;&quot;&gt;생산라인 역추적&lt;/td&gt;
&lt;td style=&quot;width: 11.9768%;&quot;&gt;딥러닝&lt;/td&gt;
&lt;td style=&quot;width: 8.60464%;&quot;&gt;빠릉&lt;/td&gt;
&lt;td style=&quot;width: 12.0931%;&quot;&gt;근사&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완벽한 Shapley는 너무 느리니까, 모델 구조에 맞는 지름길을 찾은 게 각 변형 알고리즘이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. SHAP 시각화 + 코드&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1777716522429&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ── 1. 샘플 데이터 생성 ──────────────────────────────
np.random.seed(42)
n = 200

data = pd.DataFrame({
    '종양크기': np.random.uniform(0.5, 5.0, n),
    '위치':     np.random.uniform(0.0, 1.0, n),
    '나이':     np.random.uniform(20, 80, n),
    '혈압':     np.random.uniform(60, 140, n),
    'MRI강도':  np.random.uniform(0.1, 1.0, n),
})

prob = 1 / (1 + np.exp(-(
    1.5 * data['종양크기'] +
    0.8 * data['MRI강도'] * 5 +
    0.3 * (data['나이'] - 50) / 10 -
    3.0
)))
y = (prob &amp;gt; 0.5).astype(int)

# ── 2. 모델 학습 ─────────────────────────────────────
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(data, y)

# ── 3. SHAP 계산 ─────────────────────────────────────
explainer = shap.TreeExplainer(model)
shap_values = explainer(data)
sv = shap_values[:, :, 1]  # class=1 (악성) 기준&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{2}. 코드 흐름&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 샘플 데이터 생성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양크기, 위치, 나이, 혈압, MRI 신호강도 200개 데이터 생성&lt;/li&gt;
&lt;li&gt;prob 수식으로 악성 확률 계산 : 0.5 넘으면 악성(1), 아니면 양성(0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 종양크기(1.5)와 MRI강도(0.8*5=4.0)가 가중치가 높아서 예측에 가장 큰 영향&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;(2). 모델 학습 &lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RandomForest가 위 데이터로 &quot;악성 vs 양성&quot; 분류 학습&lt;/li&gt;
&lt;li&gt;(SHAP이 설명할 블랙박스 모델)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;(3). SHAP 계산 &lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TreeExplainer : RandomForest 전용 SHAP 계산기 생성&lt;/li&gt;
&lt;li&gt;explainer(data) : 전체 200개 데이터에 대해 SHAP값 계산&lt;/li&gt;
&lt;li&gt;sv = shap_values [:, :, 1] : 악성(class=1) 기준 SHAP값만 추출&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;rarr; 200명 &amp;times; 5개 피처 각각의 기여도 행렬이 만들어짐&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 결과&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Summary Plot - 전체 피처 중요도 한눈에&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30명 학생(데이터) 전원의 과목별(피처별) 기여도를 한 장에 모아놓은 성적표와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 과목이 전체 합격/불합격에 가장 영향을 많이 줬나?&quot;를 한눈에 파악할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T2zPp/dJMcabjNhp7/icnei3n8h6l792F6P4ZK5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T2zPp/dJMcabjNhp7/icnei3n8h6l792F6P4ZK5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T2zPp/dJMcabjNhp7/icnei3n8h6l792F6P4ZK5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT2zPp%2FdJMcabjNhp7%2Ficnei3n8h6l792F6P4ZK5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;290&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 종양 크기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빨간 점(값 높음)이 오른쪽(+방향)에 몰려있음&lt;/li&gt;
&lt;li&gt;파란 점(값 낮음)이 왼쪽(-방향)에 퍼져있음&lt;/li&gt;
&lt;li&gt;종양이 클수록 악성 확률 올림, 작을수록 내림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. MRI 강도&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양크기와 동일한 패턴&lt;/li&gt;
&lt;li&gt;MRI 신강도가 높을수록 악성 확률 올림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 나이&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;점들이 0 근처에 몰려 있음&lt;/li&gt;
&lt;li&gt;나이는 영향이 있지만 상대적으로 약함 (가중치 0.03으로 설정했기 때문)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 위치 / 혈압&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;점들이 전부 0 근처에 집중&lt;/li&gt;
&lt;li&gt;예측에 거의 영향 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 만들 때 &quot;종양크기, MRI 신호강도가 중요하다&quot;라고 설정했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP이 모델을 분석해서 정확히 그걸 찾아냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 어떤 근거로 판단했는지 역추적하는 게 XAI의 핵심이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). Force Plot - 줄다리기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림은 줄다리기 기준값(0.91)에서 시작해서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간 팀(올리는 피처) vs 파란 팀(내리는 피처)이 최종 예측값(0.98)으로 끌어당기는 그림이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m7P9Z/dJMcaf0JGVd/QBOVXjB0h3e9001HkUhZN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m7P9Z/dJMcaf0JGVd/QBOVXjB0h3e9001HkUhZN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m7P9Z/dJMcaf0JGVd/QBOVXjB0h3e9001HkUhZN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm7P9Z%2FdJMcaf0JGVd%2FQBOVXjB0h3e9001HkUhZN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;696&quot; height=&quot;144&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 환자의 종양크기와 MRI 신호강도 때문에 악성 확률이 0.91에서 0.98로 올라갔고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나이가 젊다는 점(26세)이 유일하게 악성 확률을 낮추고 있다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). Waterfall Plot - 가계부&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월초 잔액(기준값)에서 시작하여 수입/지출이 한 줄씩 쌓여가며 월말 잔액(최종 예측값)이 되는 과정을 보여주는 가계부이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHnNKQ/dJMcaaZrwgr/ewQlkDv4tqxpqUK5t6jJLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHnNKQ/dJMcaaZrwgr/ewQlkDv4tqxpqUK5t6jJLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHnNKQ/dJMcaaZrwgr/ewQlkDv4tqxpqUK5t6jJLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHnNKQ%2FdJMcaaZrwgr%2FewQlkDv4tqxpqUK5t6jJLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;355&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종양크기(+0.06)와 MRI 신호강도(+0.03)가 기준값 0.91을 0.98로 끌어올렸고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젊은 나이(-0.02)가 유일하게 소폭 낮추고 있다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(4). Dependence Plot - 종양크기 성장 패턴&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 피처의 값이 변할 때 SHAP 기여도가 어떻게 바뀌는지,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 피처와의 상호작용까지 색깔로 함께 보여주는 그래프다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqpkBM/dJMcaiDaEJb/vhM87t1vdb1o3lLsVUIAU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqpkBM/dJMcaiDaEJb/vhM87t1vdb1o3lLsVUIAU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqpkBM/dJMcaiDaEJb/vhM87t1vdb1o3lLsVUIAU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqpkBM%2FdJMcaiDaEJb%2FvhM87t1vdb1o3lLsVUIAU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;698&quot; height=&quot;459&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종양크기 2cm 이하면 악성 확률을 크게 내리고, 2cm 이상이면 일정하게 올린다. 특히 작은 종양일 때 MRI 강도가 낮을수록(파란 점) 양성 판정이 더 강해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;SHAP은 같은 결과를 목적에 따라 다양한 방식으로 시각화할 수 있다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 경향을 보려면 Summary Plot,&lt;/li&gt;
&lt;li&gt;1건의 예측을 설명하려면 Force Plot / Waterfall Plot,&lt;/li&gt;
&lt;li&gt;특정 피처의 패턴을 보려면 Dependence Plot을 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[7]. SHAP의 한계&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 피처 간 상관관계 문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;없는 피처 = 평균으로 대체&quot; 가정 때문에 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키와 몸무게는 상관관계가 있는데, 키=140cm, 몸무게=5000kg 같은 현실에 거의 없는 조합으로 계산하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 모델이 학습할 때 이런 조합을 거의 본 적 없기 때문에 예측값 자체가 불안정해지며, SHAP 기여도도 왜곡된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 계산 비용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피처가 많아질수록 조합이 2^n으로 늘어난다. Kernel SHAP으로 근사해도 느리다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재료가 30개인 요리의 기여도를 측정하려면 아무리 빠른 방법을 써도 오래 걸린다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 인과관계 &amp;ne; 기여도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP은 &quot;얼마나 기여했나&quot;는 말해주지만, &quot;왜 기여했나&quot;는 모른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성적표는 &quot;수학이 성정에 기여했다&quot;라고 알려주지만, &quot;왜 수학을 잘했나?&quot;는 알려주지 않는다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 모델 의존&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP은 모델의 예측을 설명하는 것이지, 현실을 설명하는 게 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 자체가 틀리면 SHAP 설명도 틀린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못된 지도를 아무리 잘 해석해도 결국 길을 잘못 안내하게 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 전문가가 아닌 사람에게 설명이 어렵다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP 값 자체가 숫자라서 환자/보호자 같은 일반인에게 직접 설명하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의사가 &quot;이 수치가 +0.06 기여했습니다&quot;라고 해도 환자는 이해하지 못한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[8]. 결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP은 모델이 뭘 봤는지는 잘 설명하지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 현실에서 왜 그런지 까지는 말해주지 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출처 :&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://velog.io/@sjinu/개념정리SHAPShapley-Additive-exPlanations&quot;&gt;https://velog.io/@sjinu/개념정리SHAPShapley-Additive-exPlanations&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI/AI</category>
      <category>AI</category>
      <category>shap</category>
      <category>XAI</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/27</guid>
      <comments>https://perry03.tistory.com/27#entry27comment</comments>
      <pubDate>Sat, 2 May 2026 20:44:28 +0900</pubDate>
    </item>
    <item>
      <title>XAI 기법 - LIME</title>
      <link>https://perry03.tistory.com/26</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. LIME란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측 하나를 설명하기 위해, 주변만 단순한 모델로 흉내 내는 기법이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. 핵심 아이디어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 모델 전체를 이해하려 하지 말고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명하고 싶은 예측 1건 주변에서만 단순한 선형 모델로 근사해서 설명하자&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. &quot;주변&quot;?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 데이터를 살짝 변형한 유사한 데이터들을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예를 들어 원본 데이터가 종양 크기 = 2.1cm, 나이=40 이면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양크기 = 2.3cm, 나이 = 45 &amp;rArr; 주변&lt;/li&gt;
&lt;li&gt;종양크기 = 1.7cm, 나이 = 43&amp;nbsp;&amp;rArr; 주변&lt;/li&gt;
&lt;li&gt;종양크기 = 1.0cm, 나이 = 25&amp;nbsp;&amp;rArr; 주변 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 거리가 가까울수록 가중치를 높게, 멀수록 낮게 줘서 선형 모델을 학습시키는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. 작동 원리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 설명할 데이터 1건 선택&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 : 종양 크기 = 2.1cm, MRI 신호강도 = 0.7, 나이 = 45세 &amp;rArr; 예측값 = 0.82&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 주변 랜덤 샘플 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 주변을 살짝 변형한 데이터 N개 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N은 사용자가 지정하는 하이퍼파라미터이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N이 크면 더 안정적이지만, 느리다.&lt;/li&gt;
&lt;li&gt;N이 작으면 불안정하지만 빠르다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 일반적으로 500~1000 정도를 기본값으로 쓴다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;샘플1 : 종양크기=2.0, MRI 신호강도=0.6, 나이=46세 &amp;rArr; 예측값 = 0.79&lt;/li&gt;
&lt;li&gt;샘플2 : 종양크기=2.3, MRI 신호강도=0.8, 나이=44세 &amp;rArr; 예측값 = 0.85&lt;/li&gt;
&lt;li&gt;샘플3: 종양크기=1.9, MRI 신호강도=0.7, 나이=47세 &amp;rArr; 예측값 = 0.76&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 거리 기반 가중치 부여&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본과 가까울수록 가중치 높음, 멀수록 낮음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;샘플1 (가까움) &amp;rArr; 가중치 0.9&lt;/li&gt;
&lt;li&gt;샘플2 (보통) &amp;rArr; 가중치 0.6&lt;/li&gt;
&lt;li&gt;샘플3 (멂) &amp;rArr; 가중치 0.2&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 가중 선형 회귀 학습&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샘플들과 가중치로 단순 선형 모델 학습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측값 =0.5 + 0.15 x 종양크기 + 0.10 x MRI 신호강도 - 0.02 x 나이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;측량 지점들을 기반으로 &quot;이 근처 지형은 대략 이런 경사&quot;라고 직성으로 근사하는 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 선형 모델 계수 = 기여도&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양크기 계수 = +0.15 &amp;rArr; 가장 중요&lt;/li&gt;
&lt;li&gt;MRI 신호강도 계수 = +0.10 &amp;rArr; 두 번째로 중요&lt;/li&gt;
&lt;li&gt;나이 계수 = -0.02 &amp;rArr; 악영향&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 주변에 샘플을 뿌리고 가까울수록 가중치를 높게 측정하고 선형 회귀 학습을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 진행 후, 계수가 곧 기여도를 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. LIME 수식&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etO9YS/dJMb997jr9y/qwdfxAYHGfPANGsyfo3DSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etO9YS/dJMb997jr9y/qwdfxAYHGfPANGsyfo3DSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etO9YS/dJMb997jr9y/qwdfxAYHGfPANGsyfo3DSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FetO9YS%2FdJMb997jr9y%2FqwdfxAYHGfPANGsyfo3DSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;277&quot; height=&quot;69&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfuyaM/dJMcajviQ86/doUKJDyNUSJzwXX3kHeJ61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfuyaM/dJMcajviQ86/doUKJDyNUSJzwXX3kHeJ61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfuyaM/dJMcajviQ86/doUKJDyNUSJzwXX3kHeJ61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfuyaM%2FdJMcajviQ86%2FdoUKJDyNUSJzwXX3kHeJ61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;270&quot; height=&quot;278&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수식을 항 별로 정리하면 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kWM9Z/dJMcacQuI3F/Z3m1qdrKYRwPSnkGFWjoh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kWM9Z/dJMcacQuI3F/Z3m1qdrKYRwPSnkGFWjoh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kWM9Z/dJMcacQuI3F/Z3m1qdrKYRwPSnkGFWjoh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkWM9Z%2FdJMcacQuI3F%2FZ3m1qdrKYRwPSnkGFWjoh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;359&quot; height=&quot;69&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 산길을 직선으로 근사할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;실제 지형과 최대한 비슷하면서도(L), 최대한 단순한 직선 (&amp;Omega;)을 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블랙박스 AI 모델의 예측 이유를 설명하는 XAI 대표 기술은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME과 SHAP이 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. LIME vs SHAP 비교&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 핵심 철학 차이&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 63.3723%; height: 89px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.0839%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 41.007%;&quot;&gt;LIME&lt;/td&gt;
&lt;td style=&quot;width: 69.0563%;&quot;&gt;SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.0839%;&quot;&gt;기반&lt;/td&gt;
&lt;td style=&quot;width: 41.007%;&quot;&gt;최적화(선형 근사)&lt;/td&gt;
&lt;td style=&quot;width: 69.0563%;&quot;&gt;게임이론(공정한 기여도 분배&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.0839%;&quot;&gt;질문&lt;/td&gt;
&lt;td style=&quot;width: 41.007%;&quot;&gt;&quot;이 주변을 단순하게 설명하면?&quot;&lt;/td&gt;
&lt;td style=&quot;width: 69.0563%;&quot;&gt;&quot;각 피처가 얼마나 기여했나?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME : 복잡한 산길을 &quot;이 근처만 평평하다고 가정&quot;하고 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP : 산길 전체를 분석해서 &quot;각 구간이 정확히 얼마나 험했나?&quot;를 계산&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 설명 범위&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 46.9763%; height: 99px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.4886%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 20.3236%;&quot;&gt;LIME&lt;/td&gt;
&lt;td style=&quot;width: 36.6343%;&quot;&gt;SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.4886%;&quot;&gt;범위&lt;/td&gt;
&lt;td style=&quot;width: 20.3236%;&quot;&gt;Local&lt;/td&gt;
&lt;td style=&quot;width: 36.6343%;&quot;&gt;Local + Global 둘 다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.4886%;&quot;&gt;Global 설명&lt;/td&gt;
&lt;td style=&quot;width: 20.3236%;&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 36.6343%;&quot;&gt;Summary Plot으로 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME : 골목길 하나만 설명 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP : 골목길 하나도 되고, 도시 전체 지도도 가능&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 결과 안정성&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 68.4866%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.5426%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 23.7984%;&quot;&gt;LIME&lt;/td&gt;
&lt;td style=&quot;width: 23.5403%;&quot;&gt;SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.5426%;&quot;&gt;같은 데이터 반복 실행&lt;/td&gt;
&lt;td style=&quot;width: 23.7984%;&quot;&gt;겨로가가 달라질 수 있음&lt;/td&gt;
&lt;td style=&quot;width: 23.5403%;&quot;&gt;항상 동일한 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.5426%;&quot;&gt;이유&lt;/td&gt;
&lt;td style=&quot;width: 23.7984%;&quot;&gt;샘플링 랜덤성&lt;/td&gt;
&lt;td style=&quot;width: 23.5403%;&quot;&gt;수학저긍로 유일한 값 보장&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME : 여론조사를 매번 다른 사람에게 물어봐서 겨로가가 달라짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP : 수학 공식으로 계산하니까 항상 같은 답이 나옴&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 계산 속도&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 58.7209%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.4728%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 22.0543%;&quot;&gt;LIME&lt;/td&gt;
&lt;td style=&quot;width: 25.1937%;&quot;&gt;SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.4728%;&quot;&gt;기본 속도&lt;/td&gt;
&lt;td style=&quot;width: 22.0543%;&quot;&gt;빠름&lt;/td&gt;
&lt;td style=&quot;width: 25.1937%;&quot;&gt;느림(Tree SHAP은 빠름)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.4728%;&quot;&gt;이유&lt;/td&gt;
&lt;td style=&quot;width: 22.0543%;&quot;&gt;선형 회귀만 돌리면 됨&lt;/td&gt;
&lt;td style=&quot;width: 25.1937%;&quot;&gt;모든 피처 조합 계산&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;LIME : 근처 100m만 측량하면 되니까 빠름&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SHAP : 도시 전체를 측량하니까 느림&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{5}. 모델 적용 범위&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 54.0698%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;LIME&lt;/td&gt;
&lt;td style=&quot;width: 23.1008%;&quot;&gt;SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;적용 가능 모델&lt;/td&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;모든 블랙박스&lt;/td&gt;
&lt;td style=&quot;width: 23.1008%;&quot;&gt;모든 블랙박스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;최적화 버전&lt;/td&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;width: 23.1008%;&quot;&gt;Tree SHAP, Deep SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 다 블랙박스에 적용 가능하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP은 모델 구조에 맞는 최적화 버전이 따로 있어서 더 빠르고 정확하게 쓸 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{6}. 한계&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 62.907%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.1705%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 22.0542%;&quot;&gt;LIME&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%;&quot;&gt;SHAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.1705%;&quot;&gt;주요 한계&lt;/td&gt;
&lt;td style=&quot;width: 22.0542%;&quot;&gt;샘플링마다 결과 달라짐&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%;&quot;&gt;피처 간 상관관계 문제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.1705%;&quot;&gt;*커널 너비 의존&lt;/td&gt;
&lt;td style=&quot;width: 22.0542%;&quot;&gt;있음&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%;&quot;&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 17.1705%;&quot;&gt;계산 비용&lt;/td&gt;
&lt;td style=&quot;width: 22.0542%;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 23.6822%;&quot;&gt;높음&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? 커널 너비 의존&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;범위를 어떻게 잡느냐에 따라 설명이 달라지는 LIME의 불안정성이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;주변&quot;의 범위를 얼마나 넓게 볼 것인가를 결정하는 값으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주변을 측량할 때&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;커널 너비 작음 = 반경 50m만 봄&lt;/li&gt;
&lt;li&gt;커널 너비 큼 = 반경 500m까지 봄&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 데이터인데 커널 너비 설정에 따라 기여도가 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP은 이 문제가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커널 너비 같은 설정값 없이 수학적으로 모든 조합을 계산하기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 설정에 의존하지 않는다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;{7}. 언제 뭘 써야하나?&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). LIME 선택&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빠른 확인 필요할 때&lt;/li&gt;
&lt;li&gt;모델 구조를 전혀 모를 때&lt;/li&gt;
&lt;li&gt;Local 설명 1건만 필요할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). SHAP 선택 상황&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과 안정성이 중요할 때&lt;/li&gt;
&lt;li&gt;Global + Local 둘 다 필요할 때&lt;/li&gt;
&lt;li&gt;트리 기반 모델 쓸 때 (Tree SHAP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME은 빠르고 단순하지만 불안정하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP은 느리지만 수학적으로 정확하고 다양학 활용이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구 목적이라면 SHAP, 빠른 프로토타입이라면 LIME을 선택하는 게 좋다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. 실습&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1777692044827&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ── 1. 샘플 데이터 생성 ──────────────────────────────
np.random.seed(42)
n = 200

data = pd.DataFrame({
    '종양크기': np.random.uniform(0.5, 5.0, n),
    '위치':     np.random.uniform(0.0, 1.0, n),
    '나이':     np.random.uniform(20, 80, n),
    '혈압':     np.random.uniform(60, 140, n),
    'MRI강도':  np.random.uniform(0.1, 1.0, n),
})

prob = 1 / (1 + np.exp(-(
    1.5 * data['종양크기'] +
    0.8 * data['MRI강도'] * 5 +
    0.3 * (data['나이'] - 50) / 10 -
    3.0
)))
y = (prob &amp;gt; 0.5).astype(int)

# ── 2. 모델 학습 ─────────────────────────────────────
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(data, y)

# 3. LIME Explainer 생성
explainer = lime.lime_tabular.LimeTabularExplainer(
    training_data  = data.values,
    feature_names  = data.columns.tolist(),
    class_names    = ['양성', '악성'],
    mode           = 'classification'
)

# 4. 설명 생성
exp = explainer.explain_instance(
    data_row       = data.iloc[0].values,
    predict_fn     = model.predict_proba,
    num_samples    = 1000  # 샘플 N 지정
)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 코드 흐름&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 샘플 데이터 생성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양크기, 위치, 나이, 혈압, MRI신호강도 200개 데이터 생성&lt;/li&gt;
&lt;li&gt;prob 수식으로 악성 확률 계산(0.5 넘으면 악성(1), 아니면 양성(0))&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 모델 학습&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RandomForest가 위 데이터로 &quot;악성 vs 양성&quot; 분류 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. LIME Explainer 생성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;나는 이런 데이터를 다루는 분류 모델을 설명할 거야&quot;를 선언&lt;/li&gt;
&lt;li&gt;training_data : 전체 데이터 분포 파악용&lt;/li&gt;
&lt;li&gt;feature_names : 피처 이름&lt;/li&gt;
&lt;li&gt;mode='classification' : 분류 문제임을 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 설명 생성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;data.iloc[0] : 첫 번째 환자 1건만 설명&lt;/li&gt;
&lt;li&gt;환자 주변에 1000개 가상 샘플 생성&lt;/li&gt;
&lt;li&gt;각 샘플을 모델에 넣어서 예측값 수집&lt;/li&gt;
&lt;li&gt;그 결과로 선형 모델 근사하여 &quot;이 예측에 어떤 피처가 영향을 줬나?&quot;를 계산&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 결과&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NCNni/dJMcaa6eDsw/AB9fsqS6TdEjvKz1VXI1tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NCNni/dJMcaa6eDsw/AB9fsqS6TdEjvKz1VXI1tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NCNni/dJMcaa6eDsw/AB9fsqS6TdEjvKz1VXI1tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNCNni%2FdJMcaa6eDsw%2FAB9fsqS6TdEjvKz1VXI1tK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;684&quot; height=&quot;478&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초록 막대 : 악성 확률&lt;/li&gt;
&lt;li&gt;빨간 막대 : 악성 아닐 확률&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종양크기와 MRI 신호강도가 악성 확률을 올리고, 젊은 나이(35세 이하)가 유일하게 내리고 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[7]. 한계&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 결과 불안정성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 데이터로 여러 번 실행하면 결과가 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 여론 조사를 매번 다른 사람에게 물어보니까 결과가 조금씩 달라지는 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 커널 너비 의존성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;주변&quot;을 얼마나 넓게 볼지 설정값에 따라 기여도가 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 반경 50cm로 측량하나, 500m로 측량하냐에 따라 지형 설명이 달라지는 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 선형 근사의 한계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 비선형 모델을 선형으로 근사하기 때문에 실제와 다를 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 구불구불한 산길을 억지로 직선으로 그리면 실제 지형과 오차가 생기는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. Global 설명 불가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1건씩만 설명 가능하다. 전체 데이터 패턴은 볼 수 없다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 한계 정리&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 37.2093%; height: 148px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.9379%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 39.7287%;&quot;&gt;LIME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.9379%;&quot;&gt;주요 한계&lt;/td&gt;
&lt;td style=&quot;width: 39.7287%;&quot;&gt;불안정, 커널 너비 의존&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.9379%;&quot;&gt;Global 설명&lt;/td&gt;
&lt;td style=&quot;width: 39.7287%;&quot;&gt;불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.9379%;&quot;&gt;계산 안정성&lt;/td&gt;
&lt;td style=&quot;width: 39.7287%;&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/AI</category>
      <category>lime</category>
      <category>vs SHAP</category>
      <category>XAI</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/26</guid>
      <comments>https://perry03.tistory.com/26#entry26comment</comments>
      <pubDate>Sat, 2 May 2026 12:34:51 +0900</pubDate>
    </item>
    <item>
      <title>Attention Mechanism</title>
      <link>https://perry03.tistory.com/25</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. Attention Mechanism&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;입력 데이터의 모든 부분을 동등하게 보지 않고, 중요한 부분에 더 집중하는 메커니즘&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람이 긴 글을 읽을 때 전체를 똑같이 집중해서 읽지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;결론&quot;, &quot;핵심&quot;, &quot;중요&quot;같은 단어가 보이면 그 부분을 더 집중해서 읽는 거랑 똑같다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 왜 나왔나? - RNN의 한계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attention 이전에는 RNN(순환 신경망)이 순서가 있는 데이터를 처리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN의 문제는 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 : &quot;환자의 종양 크기가 매우 크고, MRI 신호강도가 높으며 나이는 젊다&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN 처리 순서 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;환자의&quot; &amp;rarr; &quot;종양&quot; &amp;rarr; &quot;크기가&quot; &amp;rarr; 매우&quot; &amp;rarr; &quot;크고&quot; &amp;rarr; &quot;MRI&quot; &amp;rarr; .. &amp;rarr; &quot;젊다&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문장이 길어지면 앞부분 정보가 뒤로 갈수록 희석된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번부터 10번까지 순서대로 손문을 전달하면, 10번째 사람에게 전달될 때쯤엔 처음 내용이 흐릿해지는 것처럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN도 문장이 길어질수록 앞부분 정보가 희석된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. Attnetion 해결책&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;릴레이로 전달하지 않고, 필요할 때 원본을 직접 참조한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;젊다&quot;를 처리할 때&lt;/li&gt;
&lt;li&gt;&quot;환자의&quot;, &quot;종양&quot;, &quot;크기가&quot;.. 전부 직접 참조하지만 (가중치 부여)&lt;/li&gt;
&lt;li&gt;&quot;나이&quot; 관련 단어에 높은 가중치를 부여하는 것이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지는 낮은 가중치를 부여&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[2]. 작동 원리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{1}. 핵심 3요소 - Query, Key, Value&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 54.0693%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5064%;&quot;&gt;용어&lt;/td&gt;
&lt;td style=&quot;width: 36.5384%;&quot;&gt;역할&lt;/td&gt;
&lt;td style=&quot;width: 21.4743%;&quot;&gt;비유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5064%;&quot;&gt;Query (Q)&lt;/td&gt;
&lt;td style=&quot;width: 36.5384%;&quot;&gt;&quot;나는 무엇을 찾고 있나?&quot;&lt;/td&gt;
&lt;td style=&quot;width: 21.4743%;&quot;&gt;도서관 검색어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5064%;&quot;&gt;key (K)&lt;/td&gt;
&lt;td style=&quot;width: 36.5384%;&quot;&gt;&quot;나는 어떤 내용을 갖고 있나?&quot;&lt;/td&gt;
&lt;td style=&quot;width: 21.4743%;&quot;&gt;책 제목/태그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.5064%;&quot;&gt;Value (V)&lt;/td&gt;
&lt;td style=&quot;width: 36.5384%;&quot;&gt;&quot;실제 내용&quot;&lt;/td&gt;
&lt;td style=&quot;width: 21.4743%;&quot;&gt;책 본문&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 작동 과정 단계별&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Q, K, V 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 데이터를 각각 Q, K, V로 변환&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 : &quot;종양 크기, 위치, 나이, MRI 신호강도&quot;&lt;/li&gt;
&lt;li&gt;(가중치 행렬 곱)&lt;/li&gt;
&lt;li&gt;Q = [종양크기 관점에서 뭘 찾나?]&lt;/li&gt;
&lt;li&gt;K = [각 피처가 어떤 정보를 갖고 있나?]&lt;/li&gt;
&lt;li&gt;V = [각 피처의 실제 값]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2). Attention Socre 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q와 K를 내적 해서 &quot;얼마나 관련 있나?&quot;를 수치로 계산&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biI8Qr/dJMcadPkIm3/8SNf3njLDGgBRZjgSXR1Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biI8Qr/dJMcadPkIm3/8SNf3njLDGgBRZjgSXR1Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biI8Qr/dJMcadPkIm3/8SNf3njLDGgBRZjgSXR1Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiI8Qr%2FdJMcadPkIm3%2F8SNf3njLDGgBRZjgSXR1Fk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;126&quot; height=&quot;44&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Q * K(종양 크기) = 0.92 &amp;rArr; 매우 관련 있음&lt;/li&gt;
&lt;li&gt;Q * K(나이) = 0.31 &amp;rArr; 약간 관련&lt;/li&gt;
&lt;li&gt;Q * K(혈압) = 0.05 &amp;rArr; 무관&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색어 &quot;종양 크기&quot;와 각 책 제목의 유사도 점수를 매긴 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). Scaling(스케일 조정)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Score를 &amp;radic;d_k로 나눈다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;185&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q6dKU/dJMcahRL658/OhAra4Jg0d1YvcuaDOAA4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q6dKU/dJMcahRL658/OhAra4Jg0d1YvcuaDOAA4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q6dKU/dJMcahRL658/OhAra4Jg0d1YvcuaDOAA4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq6dKU%2FdJMcahRL658%2FOhAra4Jg0d1YvcuaDOAA4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;185&quot; height=&quot;62&quot; data-origin-width=&quot;185&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점수가 너무 크면 다음 단계에서 한쪽으로 쏠리는 문제가 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 점수를 100점 만점으로 정규화하는 것과 같다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(4). Softmax - 가중치로 변환&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scaled Score를 Softmax에 통과시켜 합이 1인 가중치로 변환한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S5qtc/dJMcaiQGnzd/ldWxagN1CzYfOLCWtaFJ0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S5qtc/dJMcaiQGnzd/ldWxagN1CzYfOLCWtaFJ0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S5qtc/dJMcaiQGnzd/ldWxagN1CzYfOLCWtaFJ0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS5qtc%2FdJMcaiQGnzd%2FldWxagN1CzYfOLCWtaFJ0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;319&quot; height=&quot;65&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Score : 예 [0.92, 0.31, 0.05]&lt;/li&gt;
&lt;li&gt;(Softmax)&lt;/li&gt;
&lt;li&gt;Weight : [0.65, 028, 0.07] = 1.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사도 점수를 &quot;이 책을 몇 % 참조할까?' 비율로 변환하는 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(5). Value와 가중합 &amp;rarr; 최종 출력&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치 x Value를 합산해서 최종 출력을 계산한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qPZ6r/dJMcai4bXMa/kmEkaCbK22WkVLEsOyu0W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qPZ6r/dJMcai4bXMa/kmEkaCbK22WkVLEsOyu0W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qPZ6r/dJMcai4bXMa/kmEkaCbK22WkVLEsOyu0W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqPZ6r%2FdJMcai4bXMa%2FkmEkaCbK22WkVLEsOyu0W1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;265&quot; height=&quot;45&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Output :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0.65 x V(종양크기)&lt;/li&gt;
&lt;li&gt;0.28 x V(나이)&lt;/li&gt;
&lt;li&gt;0.07 x V(혈압)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 결과에서 관련도 높은 책(0.65)은 많이 참조하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련도 낮은 책(0.07)은 조금만 참조해서 최종 답변을 만드는 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(6). 전체 수식&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eb5PgI/dJMcaf7vu4Z/BYhCYIXEJweAo9XGoAOdwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eb5PgI/dJMcaf7vu4Z/BYhCYIXEJweAo9XGoAOdwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eb5PgI/dJMcaf7vu4Z/BYhCYIXEJweAo9XGoAOdwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feb5PgI%2FdJMcaf7vu4Z%2FBYhCYIXEJweAo9XGoAOdwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;394&quot; height=&quot;72&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(7). 전체 흐름&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력 데이터&lt;/li&gt;
&lt;li&gt;Q, K, V 생성&lt;/li&gt;
&lt;li&gt;Q x K^T =&amp;nbsp;Attention Score (유사도 계산)&lt;/li&gt;
&lt;li&gt;Attention Score / &amp;radic;d_k = Scaling (점수 안정화)&lt;/li&gt;
&lt;li&gt;Scaling 값은 Softmax를 진행하여 Attention Weight 비율로 변환&lt;/li&gt;
&lt;li&gt;Weight x V = 최종 출력 (중요한 정보가 더 많이 반영)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q(내가 찾는 것)와 K(각 입력의 특성)의 유사도로 가중치를 만들고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 가중치로 V(실제값)를 가중합 해서 &quot;중요한 것을 더 많이 반영한 출력&quot;을 만드는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. Attention Mechanism 종류&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Soft Attention&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;모든 입력에 가중치를 부여해서 전부 참조&quot;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 : [종양크기, 위치, 나이, 혈압, MRI 신호강도]&lt;/li&gt;
&lt;li&gt;가중치 : [0.45, 0.05, 0.12, 0.03, 0.35]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 전부 *참조하되, 중요한 것을 더 많이 반영&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;예측할 때 해당 입력값을 얼마나 반영하냐&quot;는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 시험 공부할 때 모든 과목을 공부하되 중요한 과목에 더 많은 시간을 투자하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 과목도 완전히 무시하지는 않는다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;미분 가는 &amp;rArr; 역전파로 학습 가능&lt;/li&gt;
&lt;li&gt;협재 딥러닝에서 표준으로 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Hard Attention&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;중요한 입력 몇 개만 선택해서 참조, 나머지는 완전히 무시&quot;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 : [종양크기, 위치, 나이, 혈압, MRI 신호강도]&lt;/li&gt;
&lt;li&gt;선택 : [종양크기, MRI 신호강도]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들만 참조하고, 나머지는 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 시험 공부할 때 이 두 과목만 나온다고 확신하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 과목은 아예 보지도 않는 것이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;미분 불가능 &amp;rArr; 학습이 어려움&lt;/li&gt;
&lt;li&gt;현재 거의 안 씀&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. Self-Attention&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;입력이 자기 자신에게 Attention을 계산&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q, K, V가 전부 같은 입력에서 나옴&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 문장 : &quot;종양이 크고 MRI 신호 강도가 높다&quot;&lt;/li&gt;
&lt;li&gt;&quot;종양&quot;이 &quot;크고&quot;와 얼마나 관련? = 0.72&lt;/li&gt;
&lt;li&gt;&quot;종양&quot;이 &quot;MRI&quot;와 얼마나 관련? = 0.61&lt;/li&gt;
&lt;li&gt;&quot;종양&quot;이 &quot;높다&quot;와 얼마나 관련? = 0.35&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 팀 프로젝트에서 팀원들끼리 &quot;나는 저 팀원과 얼마나 협력해야 하나?&quot;를 서로 계산하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 정보 없이 팀원들끼리만 관계를 파악하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지에서 Self-Attention을 사용하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뇌 MRI 픽셀들끼리 서로 관계 계산을 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;종양 픽셀과 주변 픽셀은 관련성이 높다&quot;&lt;/li&gt;
&lt;li&gt;&quot;종양 픽셀과 두개골 픽셀은 관련성이 낮다&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;이 픽셀은 저 픽셀과 연관 있다&quot;를 스스로 학습한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. Multi-Head Attention&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Self-Attention을 여러 개 병렬로 동시 수행&quot;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Head 1 : 종양크기 관점으로 Attention 계산&lt;/li&gt;
&lt;li&gt;Head 2 : 위치 관점으로 Attention 계산&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;Head 7 : 전체 패턴 관점으로 Attention 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전부 합쳐서 최종 출력&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 수식&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj01Pp/dJMcagyzSkz/G0bkazb8o3PIaRtKvAqX3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj01Pp/dJMcagyzSkz/G0bkazb8o3PIaRtKvAqX3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj01Pp/dJMcagyzSkz/G0bkazb8o3PIaRtKvAqX3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj01Pp%2FdJMcagyzSkz%2FG0bkazb8o3PIaRtKvAqX3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;175&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/21zCS/dJMcaib8Oua/tgIeMQ6eDssx6hhiP5pAZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/21zCS/dJMcaib8Oua/tgIeMQ6eDssx6hhiP5pAZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/21zCS/dJMcaib8Oua/tgIeMQ6eDssx6hhiP5pAZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F21zCS%2FdJMcaib8Oua%2FtgIeMQ6eDssx6hhiP5pAZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;670&quot; height=&quot;232&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(2). 왜 여러 Head가 필요한가?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Single Head : 한 가지 관점만 봄&lt;/li&gt;
&lt;li&gt;Multi Head : 여러 관점을 동시에 볼 수 있어 더 풍부한 표현이 가능함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비유하자면 MRI를 판독할 때 한 명의 의사보다 신경외과, 방사선과, 종양내과 전문의가 동시에 보는 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각자 다른 부분에 집중해서 더 정확한 판단이 가능하다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{5}. 정리&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 64.8837%; height: 175px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;Soft Attention&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;Hard Attention&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;Self-Attention&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;Multi-Head&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;참조 방식&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;전부 가중치&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;일부만 선택&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;자기 자신 참조&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;여러 관점 병렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;학습 가능&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;가능&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;가능&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;현재 사용&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;사용&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;거의 안씀&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;사용&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;Transformer&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;기반&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;핵심&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 21px;&quot;&gt;핵심&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Soft는 전부 참조, Hard는 일부만 참조,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Self는 자기들끼리 관계 파악, Multi-Head는 여러 관점으로 동시에 분석한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 딥러닝 표준은 Self-Attention + Mulit-Head 조합이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 두 가지를 핵심 구조로 설계한 모델이 바로 Transformer이다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;[4]. Tansformer와의 연결&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{1}. Tansformer란?&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;RNN 없이 Attention 만으로 만든 딥러닝 모델&quot;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2017년 논문 &quot;Attention is All You Need&quot;에서 등장했다. 제목 그대로 &quot;Attention만 있으면 된다&quot;를 선언했다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존에는 릴레이 전달(RNN)로 정보를 처리했는데,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Transformer는 &quot;릴레이 없이 전원이 동시에 원본을 직접 보면 되잖아&quot;라고 한 것이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{2}. Transformer 구조&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n9JwT/dJMcac30HDZ/F7K7BhyzwuMC0Ylpw9PEk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n9JwT/dJMcac30HDZ/F7K7BhyzwuMC0Ylpw9PEk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n9JwT/dJMcac30HDZ/F7K7BhyzwuMC0Ylpw9PEk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn9JwT%2FdJMcac30HDZ%2FF7K7BhyzwuMC0Ylpw9PEk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;378&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(왼쪽) Encoder = 문제를 완전히 이해하는 과정&lt;/li&gt;
&lt;li&gt;(오른쪽) Decoder = 이해한 내용을 바탕으로 답을 만드는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{3}. Attention이 Transformer의 핵심?&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Transformer 안에서 Attention이 하는 역할은 3가지다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(1). Encoder Self-Attention - 입력 토큰들끼리 서로 관계 파악&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;종양이 크고 MRI 신호강도가 높다&quot;&lt;/li&gt;
&lt;li&gt;&quot;종양&quot;이 &quot;크고&quot;와 얼마나 관련? 계산&lt;/li&gt;
&lt;li&gt;&quot;MRI&quot;가 &quot;높다&quot;와 얼마나 관련? 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문장 전체 맥락을 이해한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비유하자면, 팀원들이 서로 &quot;나는 저 사람이랑 얼마나 협력해야 하나&quot;를 파악하는 것이다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(2). Decoder Self-Attention 이미 생성한 출력 토큰들끼리 관계 파악&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력 : &quot;악성 종양 의심&quot;&lt;/li&gt;
&lt;li&gt;&quot;악성&quot;이 &quot;종양&quot;과 얼마나 관련? 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자연스러운 출력 생성&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(3). Encoder-Decoder Attention - 입력을 보면서 출력 생성&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Decoder(답 생성) &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; Encoder(문제 이해) 직접 참조한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rArr; &quot;지금 이 출력을 만들 때 입력의 어느 부분을 봐야 하나?&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;비유하자면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;번역가가 번역할 때 &quot;이 단어를 쓸 때 원문의 어느 부분을 참고해야 하나?&quot;를 매번 확인하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{4}. Positional Encoding&lt;br /&gt;Attention은 순서를 모르기 때문에 위치 정보를 따로 추가해야 한다.&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RNN : 순서대로 처리하니까 위치는 자동으로 앎&lt;/li&gt;
&lt;li&gt;Transformer : 전부 동시에 처리하기 때문에 위치 정보가 없다&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rArr; Positional Encoding으로 위치 정보 추가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;비유하자면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;팀원 전원이 동시에 회의하면 발언 순서를 모르니까 번호표를 달아주는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{5}. Vision Transformer(ViT) - 이미지에 적용&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;원래 Transformer는 텍스트용이었지만, 이미지에도 적용한 것이 ViT이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;작동 방식은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MRI 이미지 (224x224)&lt;/li&gt;
&lt;li&gt;16x16 패치로 분할 (총 196개 패치)&lt;/li&gt;
&lt;li&gt;각 패치를 토큰처럼 취급&lt;/li&gt;
&lt;li&gt;Transformer로 패치들 간 관계 학습&lt;/li&gt;
&lt;li&gt;결과 : &quot;이 패치(종양 부위)가 예측에 중요하다&quot;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;비유하면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;MRI 사진을 196조각 퍼즐로 분리한 뒤, 각 조각이 다른 조각과 얼마나 관련 있는지 Attention으로 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&quot;종양 조각&quot;이 &quot;주변 조각&quot;과 높은 관련성이 있으면 중요한 부위로 학습한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{6}. CNN과 ViT 비교&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 51.6279%; height: 183px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;CNN&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;ViT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;처리 방식&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;지역적 패턴 학습&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;전역적 관계 학습&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;강점&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;작은 데이터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;큰 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Grand-CAM 적용&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;잘 됨&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;별도 방법 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;뇌종양 MRI&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;많이 사용&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;최근 연구 증가&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{7}. GPT, BERT도 전부 Transformer?&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BERT = Transformer Encoder만 사용 = 문장 이해&lt;/li&gt;
&lt;li&gt;GPT = Transformer Decoder만 사용 = 문장 생성&lt;/li&gt;
&lt;li&gt;ViT = Transformer를 이미지에 적용&lt;/li&gt;
&lt;li&gt;Claude = transformer 기반 LLM&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Transformer는 레고 블록, BERT, GPT, ViT는 같은 레고로 만든 다른 모양의 작품들&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{8}. 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Transformer는 RNN 없이 Multi-Head Self-Attention만으로 만든 모델이다.&lt;/li&gt;
&lt;li&gt;Attention이 핵심 엔진이고, BERT/GPT/ViT 등은 전부 여기서 파생된 것들이다.&lt;/li&gt;
&lt;li&gt;종양 MRI에서는 ViT + Attention Map이 최신 XAI 연구 방향이다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;[5]. Grad-CAM과 Attention의 관계&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 38.4884%; height: 111px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.5686%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.0392%;&quot;&gt;Grad-CAM&lt;/td&gt;
&lt;td style=&quot;width: 42.745%;&quot;&gt;Attention Map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.5686%;&quot;&gt;시점&lt;/td&gt;
&lt;td style=&quot;width: 33.0392%;&quot;&gt;예측 후 역추적&lt;/td&gt;
&lt;td style=&quot;width: 42.745%;&quot;&gt;예측 중 실시간 반영&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.5686%;&quot;&gt;방식&lt;/td&gt;
&lt;td style=&quot;width: 33.0392%;&quot;&gt;사후 분석&lt;/td&gt;
&lt;td style=&quot;width: 42.745%;&quot;&gt;학습된 가중치&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비유하면&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Grad-CAM은 시험이 끝나고 &quot;어떤 문제가 점수에 영향을 줬나&quot; 역추적하는 것이고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Attention은 시험 보는 도중에 &quot;이 문제에 집중해야겠다&quot;라고 스스로 판단하는 것이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{1}. Grad-CAM : 사후 분석&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델이 예측을 마친 뒤, 역전파로 중요한 부위를 찾아낸다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사진 입력&lt;/li&gt;
&lt;li&gt;CNN&amp;nbsp;&lt;/li&gt;
&lt;li&gt;예측값 출력&lt;/li&gt;
&lt;li&gt;역전파&lt;/li&gt;
&lt;li&gt;기여도 추적&lt;/li&gt;
&lt;li&gt;히트맵 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;블랙박스 CCTV 사고가 난 이후에 CCTV를 돌려보면 &quot;어디서 문제가 생겼나?&quot;를 분석하는 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사고 당시(예측 중)엔 아무것도 기록을 안 하고, 끝나고 나서야 분석(역전파)이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(1). 특징&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 구조를 바꿀 필요 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;모델을 건드리지 않고 기존 역전파 구조를 그대로 활용하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 CNN에도 붙일 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; Conv 레이어와 역전파 구조만 있으면 작동하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예측이 끝나야 히트맵 생성 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; 예측값이 역추적의 출발점이기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{2}. Attention Map : 예측 중 실시간&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;모델이 예측하는 도중, 스스로 어디를 볼지 가중치를 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사진 입력&lt;/li&gt;
&lt;li&gt;패치 N (종양 부위) &amp;rarr; Attention 가중치 0.80&lt;/li&gt;
&lt;li&gt;가중치 반영해서 예측값 계산&lt;/li&gt;
&lt;li&gt;Attention 가중치 자체가 히트맵&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;비유하자면&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;경험이 많은 의사가 MRI 사진을 보는 도중에 &quot;이 부위가 수상하다&quot;며 자동으로 집중하는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;사후 분석 없이 보면서 동시에 중요한 부위를 판단한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(1). 특징&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 안에 Attention 레이어가 있어야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; Attention Map은 외부에서 추적하는 게 아니라 Attention 레이어의 가중치 자체를 꺼내는 것이기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예측과 동시에 히트맵 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; Attention 가중치가 예측 과정 중에 이미 계산되기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vit, Trnasformer 기반 모델에서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; Attention 레이어가 ViT, Transformer에만 있기 때문이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{3}. 결정적 차이 : 설명의 신뢰성&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(1). Grad-CAM&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;모델이 실제로 그 부위를 보고 판단했는가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; 역전파로 추정한 것이기 때문에 100% 확신이 불가하다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(2). Attention Map&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;모델이 실제로 그 부위에 높은 가중치를 줬는가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 학습된 가중치 그 자체이기 때문에 직접적인 근거가 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;비유하자면,&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Grad-CAM : 형사가 &quot;도둑이 아마 이 경로로 갔을 것&quot;이라는 추리하는 것이다.&lt;/li&gt;
&lt;li&gt;Attention : CTTV가 실시간으로 도둑의 경로를 기록한 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{4}. 그런데 &quot;Attention = 설명&quot;이라고 볼 수 있나?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;꼭 그렇지는 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Attention 가중치가 높다는 것은&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;모델이 &quot;그 부위를 많이 참조했다&quot;는 것인데 그 부위가 예측의 진짜 이유는 아니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;비유하면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;의사가 사진에서 특정 부위를 오래 쳐다봤다고 해서 반드시 그게 진단 근거는 아닌 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;습관적으로 보는 부위일 수도 있기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{5}. 뇌종양 MRI에서 어떻게 활용되나?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;현재 연구 트렌드는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CNN + Grad-CAM&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rArr; 구현이 쉽기 때문에 가장 많이 쓴다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ViT + Attention Map&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rArr; 최신 연구, Attention 가중치를 직접 시각화한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CNN + Attention + Grad-CAM 결합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rArr;&lt;/span&gt; 둘의 장점을 합쳐서 더 신뢰성 높은 히트맵을 만든다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[6]. 실습&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{1}. Self-Attention 작동 원리&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(1). 코드&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1777686063264&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import subprocess

# ── 한글 폰트 설정 ────────────────────────────────────
subprocess.run(['apt-get', 'install', '-y', 'fonts-nanum'], capture_output=True)
fm._load_fontmanager(try_read_cache=False)
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False

# ══════════════════════════════════════════════════════
# 1. 입력 데이터 설정
# 피처 5개를 토큰처럼 취급
# ══════════════════════════════════════════════════════
np.random.seed(42)

tokens = ['종양크기', 'MRI강도', '나이', '위치', '혈압']
n = len(tokens)   # 토큰 수 : 5
d_k = 4           # Q, K, V 차원 수

# 각 토큰을 d_k 차원 벡터로 표현 (실제로는 학습된 임베딩)
X = np.random.randn(n, d_k)
print(&quot;입력 행렬 X (5 x 4) :&quot;)
print(X.round(3))

# ══════════════════════════════════════════════════════
# 2. Q, K, V 가중치 행렬 초기화 (학습된 값이라고 가정)
# ══════════════════════════════════════════════════════
W_Q = np.random.randn(d_k, d_k)  # (4, 4)
W_K = np.random.randn(d_k, d_k)  # (4, 4)
W_V = np.random.randn(d_k, d_k)  # (4, 4)

# Q, K, V 생성
Q = X @ W_Q   # (5, 4)
K = X @ W_K   # (5, 4)
V = X @ W_V   # (5, 4)

print(f&quot;\nQ 행렬 shape : {Q.shape}&quot;)
print(f&quot;K 행렬 shape : {K.shape}&quot;)
print(f&quot;V 행렬 shape : {V.shape}&quot;)

# ══════════════════════════════════════════════════════
# 3. Attention Score 계산
# ══════════════════════════════════════════════════════

# Step 1. Q &amp;middot; Kᵀ &amp;rarr; 유사도 계산
scores = Q @ K.T   # (5, 5)

# Step 2. Scaling : &amp;radic;d_k 로 나눔
scores_scaled = scores / np.sqrt(d_k)

# Step 3. Softmax &amp;rarr; 가중치로 변환
def softmax(x):
    e_x = np.exp(x - x.max(axis=-1, keepdims=True))  # 수치 안정성
    return e_x / e_x.sum(axis=-1, keepdims=True)

attention_weights = softmax(scores_scaled)  # (5, 5)

print(&quot;\nAttention Weight 행렬 (5 x 5) :&quot;)
print(attention_weights.round(3))
print(f&quot;\n각 행의 합 (= 1.0이어야 함) : {attention_weights.sum(axis=1).round(3)}&quot;)

# ══════════════════════════════════════════════════════
# 4. Value와 가중합 &amp;rarr; 최종 출력
# ══════════════════════════════════════════════════════
output = attention_weights @ V   # (5, 4)
print(f&quot;\n최종 출력 shape : {output.shape}&quot;)

# ══════════════════════════════════════════════════════
# 5. 시각화
# ══════════════════════════════════════════════════════
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# ── Attention Weight 히트맵 ───────────────────────────
im = axes[0].imshow(attention_weights, cmap='Blues')
axes[0].set_xticks(range(n))
axes[0].set_yticks(range(n))
axes[0].set_xticklabels(tokens, rotation=45)
axes[0].set_yticklabels(tokens)
axes[0].set_title(&quot;Self-Attention 가중치 히트맵\n(행=Query, 열=Key)&quot;)
axes[0].set_xlabel(&quot;Key (참조 대상)&quot;)
axes[0].set_ylabel(&quot;Query (현재 토큰)&quot;)
plt.colorbar(im, ax=axes[0])

# 가중치 수치 표시
for i in range(n):
    for j in range(n):
        axes[0].text(j, i, f'{attention_weights[i,j]:.2f}',
                    ha='center', va='center', fontsize=9)

# ── 각 토큰의 Attention 분포 막대그래프 ──────────────
x = np.arange(n)
width = 0.15
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7']

for i in range(n):
    axes[1].bar(x + i * width, attention_weights[i],
                width, label=f'{tokens[i]} 관점', color=colors[i], alpha=0.8)

axes[1].set_xticks(x + width * 2)
axes[1].set_xticklabels(tokens)
axes[1].set_title(&quot;토큰별 Attention 분포\n(각 토큰이 다른 토큰을 얼마나 참조하는가)&quot;)
axes[1].set_ylabel(&quot;Attention 가중치&quot;)
axes[1].legend(loc='upper right', fontsize=8)
axes[1].set_ylim(0, 0.5)

plt.suptitle(&quot;Self-Attention 작동 원리 시각화&quot;, fontsize=14)
plt.tight_layout()
plt.show()

# ══════════════════════════════════════════════════════
# 6. 가장 높은 Attention 관계 출력
# ══════════════════════════════════════════════════════
print(&quot;\n  각 토큰이 가장 많이 참조하는 토큰 :&quot;)
for i, token in enumerate(tokens):
    max_idx = attention_weights[i].argmax()
    print(f&quot;{token} &amp;rarr; {tokens[max_idx]} ({attention_weights[i, max_idx]:.3f})&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(2). 코드 흐름&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 데이터 (5개 피처)&lt;/li&gt;
&lt;li&gt;W_Q, W_K, W_V 행렬로 Q, K, V 생성&lt;/li&gt;
&lt;li&gt;Q x K^T = Attention Score&lt;/li&gt;
&lt;li&gt;Attention Score / &amp;radic;d_k = Scaling&lt;/li&gt;
&lt;li&gt;Softmax 진행 = Attention Weght&lt;/li&gt;
&lt;li&gt;Wegiht x V = 최종 출력&lt;/li&gt;
&lt;li&gt;히트맵 시각화&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(3). 결과&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pSdBi/dJMcafT0v4s/4zn373di7ubUhduMD3kLdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pSdBi/dJMcafT0v4s/4zn373di7ubUhduMD3kLdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pSdBi/dJMcafT0v4s/4zn373di7ubUhduMD3kLdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpSdBi%2FdJMcafT0v4s%2F4zn373di7ubUhduMD3kLdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;426&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;종양 크기와 MRI 신호강도는 자기 자신만 강하게 참조(0.92, 0.75)해서 독립적으로 작동하고,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;나이와 위치는 혈압으로 강하게 참조(0.43, 0.82)해서 모델이 셋 사이의 관계를 학습&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{2}. ViT + Attention Map 시각화&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 코드&lt;/h4&gt;
&lt;pre id=&quot;code_1777686274685&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from PIL import Image
import subprocess

# ── 한글 폰트 설정 ────────────────────────────────────
subprocess.run(['apt-get', 'install', '-y', 'fonts-nanum'], capture_output=True)
fm._load_fontmanager(try_read_cache=False)
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False

# ── 라이브러리 설치 ───────────────────────────────────
subprocess.run(['pip', 'install', 'timm'], capture_output=True)
import timm

# ══════════════════════════════════════════════════════
# 1. MRI 이미지 로드 &amp;amp; 전처리
# ══════════════════════════════════════════════════════
from torchvision import transforms

img_orig = Image.open(&quot;/content/다운로드.jpg&quot;).convert(&quot;RGB&quot;)

transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
])

img_tensor = transform(img_orig).unsqueeze(0)  # (1, 3, 224, 224)

# ══════════════════════════════════════════════════════
# 2. ViT 모델 로드
# ══════════════════════════════════════════════════════
# ViT-Base : 이미지를 16&amp;times;16 패치로 분할해서 Transformer로 처리
model = timm.create_model('vit_base_patch16_224', pretrained=True)
model.eval()

# ══════════════════════════════════════════════════════
# 3. Attention Map 추출
# 마지막 Transformer 블록의 Attention 가중치를 Hook으로 저장
# ══════════════════════════════════════════════════════
attention_maps = []

def attention_hook(module, input, output):
    # output shape : (batch, heads, tokens, tokens)
    attention_maps.append(output.detach())

# ViT 마지막 블록의 Attention 레이어에 Hook 설치
# timm의 ViT는 blocks[-1].attn.attn_drop 에서 Attention 가중치 추출
hook = model.blocks[-1].attn.attn_drop.register_forward_hook(attention_hook)

# ── Attention 가중치를 반환하도록 설정 ────────────────
model.blocks[-1].attn.fused_attn = False

# ══════════════════════════════════════════════════════
# 4. 순전파
# ══════════════════════════════════════════════════════
with torch.no_grad():
    output = model(img_tensor)

hook.remove()  # Hook 제거

pred_class = output.argmax(dim=1).item()
pred_prob = torch.softmax(output, dim=1).max().item()
print(f&quot;예측 클래스 인덱스 : {pred_class}&quot;)
print(f&quot;예측 확률 : {pred_prob:.4f}&quot;)
print(f&quot;Attention Map shape : {attention_maps[0].shape}&quot;)
# (1, 12, 197, 197) : batch=1, heads=12, tokens=197(196패치+CLS토큰)

# ══════════════════════════════════════════════════════
# 5. Attention Map 처리
# ══════════════════════════════════════════════════════
attn = attention_maps[0].squeeze(0)  # (12, 197, 197) : heads 12개

# 12개 Head 평균
attn_mean = attn.mean(dim=0)  # (197, 197)

# CLS 토큰(0번)이 각 패치에 준 Attention 추출
# CLS 토큰 = 전체 이미지를 대표하는 토큰
cls_attn = attn_mean[0, 1:]  # (196,) : CLS &amp;rarr; 196개 패치

# 196 &amp;rarr; 14&amp;times;14 로 reshape (14 = 224/16)
cls_attn = cls_attn.numpy().reshape(14, 14)

# 정규화
cls_attn = (cls_attn - cls_attn.min()) / (cls_attn.max() - cls_attn.min())

# 224&amp;times;224 로 업샘플링
attn_resized = np.array(
    Image.fromarray(cls_attn).resize((224, 224), Image.BILINEAR)
)

# ══════════════════════════════════════════════════════
# 6. 시각화
# ══════════════════════════════════════════════════════
img_display = np.array(img_orig.resize((224, 224)))

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# 원본 이미지
axes[0].imshow(img_display, cmap='gray')
axes[0].set_title(&quot;원본 MRI 이미지&quot;)
axes[0].axis('off')

# Attention Map 히트맵
axes[1].imshow(attn_resized, cmap='jet')
axes[1].set_title(&quot;ViT Attention Map&quot;)
axes[1].axis('off')

# 오버레이
axes[2].imshow(img_display, cmap='gray')
axes[2].imshow(attn_resized, cmap='jet', alpha=0.5)
axes[2].set_title(&quot;원본 + Attention Map 오버레이&quot;)
axes[2].axis('off')

plt.suptitle(&quot;ViT Attention Map 시각화&quot;, fontsize=14)
plt.tight_layout()
plt.show()

print(f&quot;\n패치 수 : 196개 (14&amp;times;14)&quot;)
print(f&quot;Head 수 : 12개&quot;)
print(f&quot;Attention Map 크기 (업샘플링 전) : {cls_attn.shape}&quot;)
print(f&quot;Attention Map 크기 (업샘플링 후) : {attn_resized.shape}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 코드 흐름&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MRI 이미지 로드 &amp;amp; 전치리 (224x224)&lt;/li&gt;
&lt;li&gt;Vit 모델 로드 (이미지를 16x16 패치 196개로 분할)&lt;/li&gt;
&lt;li&gt;마지막 Transformer 블록 Attention 레이어에 hook 설치&lt;/li&gt;
&lt;li&gt;순전파 진행하여 Attention 가중치 저장 (12 heads, 197 tokens, 197 tokens)&lt;/li&gt;
&lt;li&gt;12개 head 평균으로 CLS 토큰 Attention 추출(196)&lt;/li&gt;
&lt;li&gt;14x14 reshap으로 정규화하여 224x224 업샘플링&lt;/li&gt;
&lt;li&gt;원본 이미지에 히트맵 오버레이&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(3). 결과&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사진 출처 : &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.knuh.kr/content/01treatment/04win05.asp&quot;&gt;https://www.knuh.kr/content/01treatment/04win05.asp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yGiPs/dJMcaipEGbE/8ZHVySIwlsObsRnZCmVw2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yGiPs/dJMcaipEGbE/8ZHVySIwlsObsRnZCmVw2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yGiPs/dJMcaipEGbE/8ZHVySIwlsObsRnZCmVw2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyGiPs%2FdJMcaipEGbE%2F8ZHVySIwlsObsRnZCmVw2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703&quot; height=&quot;374&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;뇌 오른쪽 중앙 한 지점에 집중했고, Grad-CAM보다 훨씬 좁고 뾰족한 히트맵이 나왔다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단 ImageNet 모델이라 의학적 의미는 없다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{3}. Grad-CAM 코드와 다른 점&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 75.3488%; height: 126px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Grad-CAM&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Vit Attention Map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Hook 위치&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Conv 레이어&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Attention 레이어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;역전파 필요&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;추출 대상&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Feature Map + 기울기&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Attention 가중치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;패치 분할&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;14x14 = 196개&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;(1). 흐름 비교&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Grad-CAM : 순전파 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 역전파 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 기울기 추출 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 히트맵&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;ViT Attention : 순전파 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; Attention 가중치 추출 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; 히트맵&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;[7]. Attention Mechanism 한계&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;{1}. Attention &amp;ne; 설명 (가장 큰 한계)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Attention 가중치가 높다는 것이 예측의 진짜 이유가 될 수 없다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Attention 가중치가 높은 것은&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델이 그 부위를 많이 참조했다는 것이지&lt;/li&gt;
&lt;li&gt;그 부위가 예측의 진짜 근거라는 것은 아니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;의사가 진료 중 환자 얼굴을 자주 쳐다봤다고 해서 얼굴이 진단 근거는 아니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;그냥 습관적으로 보는 것일 수도 있다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;실제 아래 연구에서 Attention 가중치를 랜덤 하게 바꿔도 예측값이 거의 안 변하는 경우가 발견되었다 하지만&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;그에 반박되는 연구도 나왔다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Jain &amp;amp; Wallace (2019) &quot;Attention is not Explanation&quot; &amp;rarr;&amp;nbsp; Attention 가중치가 예측의 근거가 아닐 수 있음을 실험으로 제시&lt;/li&gt;
&lt;li&gt;Wiegreffe &amp;amp; Pinter (2019) &quot;Attention is not not Explanation&quot; &amp;rarr; 반박 논문, 아직 학계에서 논쟁 중&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{2}. 계산 비용 문제&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Self-Attention은 입력 길이 n에 대해 O(n^2) 계산 복잡도를 갖고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 토큰 100개면 100 x 100 = 10,000번을 계산한다.&lt;/li&gt;
&lt;li&gt;입력 토큰 1000개면 1000 x 1000 = 1,000,000번 계산한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비유하면&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;팀원이 10명이면 서로 관계 파악이 45쌍이지만 팀원이 100명이면 4,950쌍이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;팀원이 늘수록 기하급수적으로 복잡해진다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MRI처럼 고해상도 이미지에서는 심각한 문제다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{3}. 해석 일관성 부족&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;같은 입력을 줘도 Multi-Head마다 다른 부위에 집중해서 어느 Head가 맞는지 알 수 없다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;8명의 전문가한테 같은 사진을 보여줬을 때 각자 다른 부위를 지목한다면,&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;어느 전문가의 의견이 맞나?&quot;는 알 수 없는 것이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;{4}. 위치 정보 손실(ViT 한계)&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ViT는 이미지를 패치로 분리해서 처리하기 때문에 패치 경계에 걸치는 특징을 놓칠 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;종양이 패치 경계에 걸쳐 있으면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패치 A : 종양 일부&lt;/li&gt;
&lt;li&gt;패치 B : 종양 일부&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각각 따로 처리되어 종양 전체 특징을 못 잡을 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MRI 사진을 16조각으로 잘랐는데 종양이 조각 경계에 걸쳐 있으면 어느 조각에도 종양 전체가 안 담기는 것이다.&lt;/p&gt;</description>
      <category>AI/AI</category>
      <category>AI</category>
      <category>attention mechanism</category>
      <category>XAI</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/25</guid>
      <comments>https://perry03.tistory.com/25#entry25comment</comments>
      <pubDate>Sat, 2 May 2026 11:04:35 +0900</pubDate>
    </item>
    <item>
      <title>Saliency Map</title>
      <link>https://perry03.tistory.com/24</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. Saliency Map이란?&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 예측할 때 입력 이미지의 어느 픽셀에 집중했는지를 시각적으로 표현한 지도이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 형광펜으로 중요한 부분에 밑줄 긋는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의사가 MRI 사진을 보고 &quot;이 부분이 수상하다&quot;며 동그라미 치는 것처럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 &quot;나는 이 부분을 보고 종양이라고 판단했어&quot;를 히트맵으로 표현하는 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 왜 필요한가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델은 이미지를 보고 예측하지만 왜 그렇게 예측했는지(블랙박스)는 말해주지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Saliency Map은 블랙박스를 열어서 &quot;모델이 이 부분를 보고 판단했다&quot;를 시각적으로 보여준다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 핵심 아이디어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;예측값에 가장 큰 영향을 준 픽셀이 어디인가?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;픽셀을 조금 바꿨을 때 예측값이 크게 바뀌면 중요한 픽셀이고, 예측값이 안 바뀌면 중요하지 않은 픽셀이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 결과물&lt;/h3&gt;
&lt;pre id=&quot;code_1777504754435&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;원본 MRI          Saliency Map 적용
┌──────────┐      ┌──────────┐
│          │      │       │  &amp;larr; 모델이 집중한 부위 (빨강)
│  [종양]  │  &amp;rarr;   │     │
│          │      │          │  &amp;larr; 모델이 무시한 부위 (파랑)
└──────────┘      └──────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵 형태로 중요한 부위는 빨강, 덜 중요한 부위는 파랑으로 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{5}. SHAP/LIMEe과의 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 45.9303%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.1048%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 31.5297%;&quot;&gt;SHAP/LIME&lt;/td&gt;
&lt;td style=&quot;width: 28.5237%;&quot;&gt;Saliency Map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.1048%;&quot;&gt;대상&lt;/td&gt;
&lt;td style=&quot;width: 31.5297%;&quot;&gt;표 피처&lt;/td&gt;
&lt;td style=&quot;width: 28.5237%;&quot;&gt;이미지 픽셀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.1048%;&quot;&gt;출력&lt;/td&gt;
&lt;td style=&quot;width: 31.5297%;&quot;&gt;피처별 기여도 수치&lt;/td&gt;
&lt;td style=&quot;width: 28.5237%;&quot;&gt;히트맵 이미지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP/LIME이 &quot;종양크기가 +0.06 기여했다&quot;고 말한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Saliency Map은 &quot;MRI 이미지의 이 부위가 중요하다&quot;를 그림으로 보여주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 모델이 이미지를 보고 어디를 보고 판단했는가를 히트맵으로 시각화한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종양 MRI에서 모델이 실제 종양 위치를 보고 판단했는가를 검증하는 핵심 도구이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. 작동 원리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 키워드는 기울기이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;예측값이 특정 픽셀에 얼마나 민감한가&quot;를 기울기로 측정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1npF4/dJMcaf0HVNG/9lVBQLGV9qyye6hesqEO5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1npF4/dJMcaf0HVNG/9lVBQLGV9qyye6hesqEO5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1npF4/dJMcaf0HVNG/9lVBQLGV9qyye6hesqEO5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1npF4%2FdJMcaf0HVNG%2F9lVBQLGV9qyye6hesqEO5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;64&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO76WB/dJMcabxfdFt/rjreeym0ZmCLPaz5yZcGXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO76WB/dJMcabxfdFt/rjreeym0ZmCLPaz5yZcGXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO76WB/dJMcabxfdFt/rjreeym0ZmCLPaz5yZcGXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO76WB%2FdJMcabxfdFt%2Frjreeym0ZmCLPaz5yZcGXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;441&quot; height=&quot;154&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산에서 경사도를 측정하는 것과 같다. 경사가 급한 곳은 조금만 움직여도 높이가 크게 변한다. 이것이 중요한 픽셀이라는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, 경사가 평평한 곳은 많이 움직여도 높이가 안 변하므로 중요하지 않은 픽셀을 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 이미지 입력 시, 예측값 계산(순전파)&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력 : MRI 이미지 &amp;rarr; 픽셀 값으로 이루어진 행렬&lt;/li&gt;
&lt;li&gt;CNN 레이어들 통과 (특징 추출)&lt;/li&gt;
&lt;li&gt;출력 : f(x) = 0.99 (악성 확률)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 이미지를 숫자로 받아서, 여러 레이어를 통해 특징을 추출하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 하나으 예측값을 출력하는 과정이 순전파이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 예측값에서 입력층으로 역추적(역전파)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순전파의 반대 방향으로 기울기를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측값이 0.99라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 레이어 역전파부터 입력 픽셀까지 역전파를 진행해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 픽셀의 기울기를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 A 학생이 90점 받은 게 어떤 공부 때문인가?를 시험 결과에서 거꾸로 추적하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학 시험 영향이 컸으면 수학 기울기가 높고, 사회 시험이 영향 없으면 사회의 기울기는 낮다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 픽셀별 기울기 = 중요도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역전파가 끝나면 각 픽셀마다 기울기 값이 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;픽셀(100, 150) 기울이고 = 0.84 &amp;rArr; 종양 위치이므로 중요함&lt;/li&gt;
&lt;li&gt;픽셀(10, 20) 기울기 = 0.02 &amp;rArr; 배경이므로 중요하지 않음&lt;/li&gt;
&lt;li&gt;픽셀(200, 230) 기울기 = 0.91 &amp;rArr; 종양 경계이므로 중요함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부 과목별 점수 기여도가 계산된 것이다. 수학(0.91) &amp;gt; 영어(84) &amp;gt; 사회(0.02)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 기울기에서 히트맵 변환&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;픽셀별 기울기를 색깔로 변환해서 원본 이미지 위에 덮는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기울기 높음 (0.8~1.0) &amp;rArr; 빨강&lt;/li&gt;
&lt;li&gt;기울기 중간 (0.4~0.8) &amp;rArr; 초록&lt;/li&gt;
&lt;li&gt;기울기 낮음 (0.0~0.4) &amp;rArr; 파랑&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기여도 숫자를 형광펜 색깔로 바꿔서 사진 위에 칠하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 전체 흐름&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지 입력&lt;/li&gt;
&lt;li&gt;순전파&lt;/li&gt;
&lt;li&gt;예측값 계산&lt;/li&gt;
&lt;li&gt;역전파&lt;/li&gt;
&lt;li&gt;픽셀별 기울기 계산&lt;/li&gt;
&lt;li&gt;시각화&lt;/li&gt;
&lt;li&gt;히트맵 생성&lt;/li&gt;
&lt;li&gt;원본 이미지에 오버레이&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순전파는 시험을 보는 것이고, 역전 파는 어떤 공부가 점수에 기여했나 역추적, 히트맵은 기여도를 색깔로 표시한 공부 지도이다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[3]. Saliency Map 종류&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Vanilla Gradient(기본 살리언시 맵)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;가장 단순하게 기울기 그대로 시각화&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작동 방식은 위의 전체 흐름과 똑같다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 한계&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노이즈가 많아서 히트맵이 지저분하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 중요한 부위 외에도 엉뚱한 픽셀이 강조된다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Guided Backpropagation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;양의 기울기만 역전 파해서 노이즈 제거&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vanilla Gradient의 노이즈 문제를 개선한 버전이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vanilla 과의 차이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vanilla : 양의 기울기 + 음의 기울기 둘 다 역전파&lt;/li&gt;
&lt;li&gt;Guided : 양의 기울기만 역전파 (음수는 차단)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 형광펜으로 칠할 때 Vanilla는 중요한 곳 + 안 중요한 곳 전부 칠하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Guided는 진짜 중요한 곳만 골라서 칠하는 필터를 장착한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vanilla보다 히트맵이 훨씬 선명하고 깔끔하다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 한계&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 실제 판단보다 이미지 구조 자체를 강조하는 경향이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 MRI 사진을 두 개의 모델로 비교한다고 해보자&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 A (잘 학습된 모델) : 종양을 보고 악성 0.92 판단&lt;/li&gt;
&lt;li&gt;모델 B (엉터리 모델) : 배경 노이즈를 보고 악성 0.91 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무 모델에 Guided Backpropagation을 적용하면?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델 A 히트맵 : 종양 부위 빨강&lt;/li&gt;
&lt;li&gt;모델 B 히트맵 : 종양 부위 빨강&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 다 똑같이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 B는 배경을 보고 판단했는데, 히트맵은 이미지에서 경계가 뚜렷한 종양 부위를 그냥 강조해 버린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;모델이 뭘 보고 판단했는가?&quot;가 아닌, &quot;이미지에서 윤곽이 선명한 곳이 어디인가?&quot;를 보여주는 경향이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형광펜 필터가 너무 똑똑해서, 모델이 틀린 이유로 판단했어도 그림에서 눈에 띄는 곳을 알아서 칠해버린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 히트맵만 봐서는 모델이 진짜 올바른 근거로 판단했는지 확인하기 어렵다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. Grad-CAM - 종양 MRI에서 표준&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;CNN 마지막 레이어의 특징맵을 활용해서 클래스별 히트맵 생성&quot;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vanilla, Guided가 픽셀 단위였다면, Grad-CAM은 CNN이 학습한 특징(Feature Map) 단위로 중요도를 계산한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 작동 방식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 마지막 Conv 레이어의 Feature Map 추출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 각 Feature Map은 &quot;전문가 한 명&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 각 Feature Map의 기울기로 가중치 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &quot;이 전문가의 의견이 최종 판단에 얼마나 영향을 줬나?&quot;를 점수화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 각 가중치 Feature Map으로 합산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 가중치 x Feature Map 합산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. ReLU를 적용하여 양의 값만 뽑음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &quot;악성에 기여한 부분&quot;만 남기고 나머지는 버림 (음수 제거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 원본 이미지 크기로 업샘플링하여 히트맵 생성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 합쳐진 지도를 원본 이미지 크기에 맞게 확대해서 히트맵 완성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 점수를 분석할 때 Vanilla는 픽셀 단위로 글자 하나하나를 분석하는 반면에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM은 단원별로 묶어서 &quot;이 단원이 점수에 얼마나 기여했나&quot;를 분석하여&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 의미 있는 단위로 중요도를 계산하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 수식&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSpTeq/dJMcah5kUzJ/3ZKHmtArTge0nMjJuH2ENk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSpTeq/dJMcah5kUzJ/3ZKHmtArTge0nMjJuH2ENk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSpTeq/dJMcah5kUzJ/3ZKHmtArTge0nMjJuH2ENk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSpTeq%2FdJMcah5kUzJ%2F3ZKHmtArTge0nMjJuH2ENk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;296&quot; height=&quot;79&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZW4AH/dJMcahxuUtB/QB9pCoLrsyG32rflS4naKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZW4AH/dJMcahxuUtB/QB9pCoLrsyG32rflS4naKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZW4AH/dJMcahxuUtB/QB9pCoLrsyG32rflS4naKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZW4AH%2FdJMcahxuUtB%2FQB9pCoLrsyG32rflS4naKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;161&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식을 작동 방식에 연결해서 보면 쉽다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A^k : 전문가 k의 분석 지도 (k번째 Feature Map)&lt;/li&gt;
&lt;li&gt;a^c_k : 전문가 k가 클래스 c(악성) 판단에 기여한 점수 (가중치)&lt;/li&gt;
&lt;li&gt;a^c_k x A^k : 기여도 높은 전문가 의견을 더 많이 반영&lt;/li&gt;
&lt;li&gt;&amp;Sigma; (k에 대해 합산) : 모든 전문가 의견을 하나로 합침&lt;/li&gt;
&lt;li&gt;ReLU(...) : 악성에 기여한 부분만 남기고 음수는 0으로 버림&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 Feature Map을 기여도(a)로 가중합산한 뒤, 양의 값만 남긴 것이 Grad-CAM 히트맵이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3). 장점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;픽셀보다 의미 있는 곳을 영역 단위로 강조&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature Map 자체가 이미 &quot;경계선&quot;, &quot;질감&quot;, &quot;형태&quot; 같은 의미 단위로 학습된 정보이기 때문이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;악성&quot; vs &quot;양성&quot; 클래스별로 다른 히트맵 생성 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식에 c(클래스)가 있어서, 악성 기준 가중치 따로, 양성 기준 가중치 따로 계산할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;노이즈 적고 해석이 직관적&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;픽셀 단위(Vanilla)는 작은 변화에도 민감하지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature Map 단위는 이미 추상화된 정보라 노이즈가 자연스럽게 줄어들기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(4). 단점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해상도가 낮다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature Map은 원본 이미지보다 훨씬 작다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(예: 224x224 이미지는 아미작 Conv 레이어에서 7x7 Feature Map이 된다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵을 원본 크기로 업샘플링하면 뭉개진 느낌이 난다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일 레이어만 본다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 Conv 레이어만 사용하기 때문에, 앞쪽 레이어에서 잡은 섬세한 특징(엣지, 질감)은 반영 안 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면 팀장 의견만 반영하고 실무자 의견을 무시하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 종양을 못 잡는다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 종양 하나만 강조하는 경향이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나온 것이 Grad-CAM++이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. Grad-CAM++ (Grad-CAM 개선판)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;여러 개의 같은 클래스 객체가 있을 때 더 정확하게&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MRI 사진에 종양이 여러 개가 있을 때, Grad-CAM은 가장 큰 종양 하나만 강종하는 경향이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM++는 여러 종양을 모두 잡아낼 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). Grad-CAM과 차이&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Grad-CAM : Feature Map 기울기를 단순 평균&lt;/li&gt;
&lt;li&gt;Grad-CAM++ : Feature Map 기울기를 픽셀별 가중 평균 하여 더 정교하다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기법은 이미지 안에 관심 객체가 여러 개 있을 때 유용하다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 종류별 비교&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 74.0698%; height: 242px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Vanilla Gradient&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Guided BP&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Grad-CAM&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Grad-CAM++&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;단위&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;픽셀&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;픽셀&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Feature Map&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;Feature Map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;노이즈&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;많음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;선명도&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;클래스별 구분&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;가능&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;다중 객체&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;약함&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;종양 MRI 적합&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{6}. 좋은 게 있는데 Grad-CAM이 표준인 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3가지가 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양 MRI는 보통 종양이 1개 Grad-CAM++의 강점인 &quot;다중 객체&quot; 상황이 종양에선 거의 안 나오기 때문에 쓸 일이 없다.&lt;/li&gt;
&lt;li&gt;논문/코드 생태계 Grad-CAM 기반 논문이 압도적으로 많아서 비교/재현이 쉽고, 연구에서 표준이 되면 웬만해서 잘 안 바뀐다.&lt;/li&gt;
&lt;li&gt;성능 차이가 크지 않다. 단일 객체 상황에서 Grad-CAM과 Grad-CAM++ 결과가 거의 동일하다. 굳이 더 복잡한 기법을 쓸 이유가 없다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[4]. 한계&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 노이즈 문제 (Vanilla Gradien 한계)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기울기 계산 과정에서 실제 중요하지 않은 픽셀도 강조되는 현상이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 교과서에서 중요한 개념만 형광펜으로 칠하려 했는데 손이 떨려서 엉뚱한 곳도 같이 칠해진 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 해석 주관성 문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵이 빨갛게 표시됐다고 해서 &quot;모델이 그 이유로 판단했다&quot;라고 확신할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 의사가 MRI에서 특정 부위를 동그라미 쳤는데 실제로는 옆에 있는 다른 이유 때문에 판단했을 수도 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동그라미 표시가 판단 근거라고 단정할 수는 없다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 인과관계 vs 상관관계 혼동&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Saliency Map은 &quot;모델이 어디를 봤나&quot;는 알려주지만 , &quot;왜 그게 중요한가&quot;는 알려주지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵이 종양 주변 부위를 강조하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종양 때문인가?&lt;/li&gt;
&lt;li&gt;종양 주변 혈관 때문인가?&lt;/li&gt;
&lt;li&gt;MRI 촬영 아티팩트 때문인가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 걸 알려주지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 성적표는 결과만 보여주고, 원인(왜 낮은지)은 알려주지 않는 것처럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Saliency Map도 &quot;어디를 봤는지&quot;만 알려주고 &quot;왜 거기가 중요한지&quot;는 알려주지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. 모델 의존성&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Saliency Map은 모델의 판단을 설명하는 것이지, 실제 인과관계를 설명하는 게 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 잘못 학습됐으면 히트맵도 잘못된 부위를 강조한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 종양을 분석하는 모델이 종양 대신 두개골 패턴으로 학습됐다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵도 두개골을 강조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵은 정확하지만 의미 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못된 공부법(학습 데이터)으로 시험을 봤는데 성적표(히트맵)는 정확하게 그 공부법을 반영해서 점수가 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성적표가 이상하게 나오는 이유는 성적표가 틀린 것이 아니라 공부법이 틀린 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{5}. 해상도 문제 (Grad-CAM 한계)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM은 feature Map 기반이라&amp;nbsp; 히트맵 해상도가 낮다. 원본 MRI 사진이 224x224인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히트맵은 7x7로 생성 후 업샘플링 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 구글 지도에서 도시 전체를 보다가 골목길을 확대하면 픽셀이 깨져서 정확한 위치를 특정하기 어려운 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{6}. 정리&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 62.093%; height: 181px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;한계&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;심각도&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;해당 기법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;노이즈&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;중&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Vailla Gradient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;해석 주관성&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;전체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;인과관계 혼동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;전체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;모델 의존성&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;전체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;해상도 낮음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;중&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Grad-CAM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[5]. 실습&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진 출처 : &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.knuh.kr/content/01treatment/04win05.asp&quot;&gt;https://www.knuh.kr/content/01treatment/04win05.asp&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1777527053896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import torch
import torch.nn as nn
import torchvision.transforms as transforms
from torchvision.models import efficientnet_b0, EfficientNet_B0_Weights
from PIL import Image
import subprocess

# ── 한글 폰트 설정 ────────────────────────────────────
subprocess.run(['apt-get', 'install', '-y', 'fonts-nanum'], capture_output=True)
fm._load_fontmanager(try_read_cache=False)
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False

# ══════════════════════════════════════════════════════
# 1. MRI 이미지 로드 &amp;amp; 전처리
# ══════════════════════════════════════════════════════
img_orig = Image.open(&quot;/content/다운로드.jpg&quot;).convert(&quot;RGB&quot;)

transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225]
    )
])

img_tensor = transform(img_orig).unsqueeze(0)  # (1, 3, 224, 224)

# ══════════════════════════════════════════════════════
# 2. EfficientNet-B0 모델 로드
# ══════════════════════════════════════════════════════
# EfficientNet은 ResNet보다 가볍고 성능이 좋음
# 실제 프로젝트에서는 뇌종양 데이터로 파인튜닝 필요
model = efficientnet_b0(weights=EfficientNet_B0_Weights.DEFAULT)
model.eval()

# ══════════════════════════════════════════════════════
# 3. Hook 설치
# EfficientNet 마지막 Conv 레이어 = features[-1]
# ══════════════════════════════════════════════════════
feature_maps = []
gradients = []

def forward_hook(module, input, output):
    feature_maps.append(output)

def backward_hook(module, grad_input, grad_output):
    gradients.append(grad_output[0])

# EfficientNet의 마지막 Conv 블록에 Hook 설치
target_layer = model.features[-1]
target_layer.register_forward_hook(forward_hook)
target_layer.register_backward_hook(backward_hook)

# ══════════════════════════════════════════════════════
# 4. 순전파
# ══════════════════════════════════════════════════════
output = model(img_tensor)
pred_class = output.argmax(dim=1).item()
pred_prob = torch.softmax(output, dim=1).max().item()
print(f&quot;예측 클래스 인덱스 : {pred_class}&quot;)
print(f&quot;예측 확률 : {pred_prob:.4f}&quot;)

# ══════════════════════════════════════════════════════
# 5. 역전파
# ══════════════════════════════════════════════════════
model.zero_grad()
output[0, pred_class].backward()

# ══════════════════════════════════════════════════════
# 6. Grad-CAM 계산
# ══════════════════════════════════════════════════════
fmap = feature_maps[0].detach().numpy()[0]   # (1280, 7, 7)
grad = gradients[0].detach().numpy()[0]      # (1280, 7, 7)

# 기울기 공간 평균 &amp;rarr; 각 Feature Map 가중치
weights = grad.mean(axis=(1, 2))             # (1280,)

# 가중치 &amp;times; Feature Map 합산
cam = np.zeros(fmap.shape[1:], dtype=np.float32)  # (7, 7)
for i, w in enumerate(weights):
    cam += w * fmap[i]

# ReLU &amp;rarr; 정규화 &amp;rarr; 업샘플링
cam = np.maximum(cam, 0)
cam = cam - cam.min()
cam = cam / (cam.max() + 1e-8)
cam_resized = np.array(
    Image.fromarray(cam).resize((224, 224), Image.BILINEAR)
)

# ══════════════════════════════════════════════════════
# 7. 시각화 (한 셀에 전부)
# ══════════════════════════════════════════════════════
img_display = np.array(img_orig.resize((224, 224)))

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

axes[0].imshow(img_display, cmap='gray')
axes[0].set_title(&quot;원본 MRI 이미지&quot;)
axes[0].axis('off')

axes[1].imshow(cam_resized, cmap='jet')
axes[1].set_title(&quot;Grad-CAM 히트맵&quot;)
axes[1].axis('off')

axes[2].imshow(img_display, cmap='gray')
axes[2].imshow(cam_resized, cmap='jet', alpha=0.5)
axes[2].set_title(&quot;원본 + Grad-CAM 오버레이&quot;)
axes[2].axis('off')

plt.suptitle(&quot;EfficientNet-B0 Grad-CAM 시각화&quot;, fontsize=14)
plt.tight_layout()
plt.show()

print(f&quot;\nFeature Map 크기 : {fmap.shape}&quot;)
print(f&quot;CAM 크기 (업샘플링 전) : {cam.shape}&quot;)
print(f&quot;CAM 크기 (업샘플링 후) : {cam_resized.shape}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 코드 흐름&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;MRI 이미지 로드 &amp;amp; 전처리 (224x224 리사이즈, 정규화)&lt;/li&gt;
&lt;li&gt;ResNet50 모델 로드&lt;/li&gt;
&lt;li&gt;마지막 Conv 레이어(Layer4)에 hook 설치 (Feature Map, 기울기 저장)&lt;/li&gt;
&lt;li&gt;순전파 진행하여 예측값 계산과 Feature Map 저장&lt;/li&gt;
&lt;li&gt;역전파 진행하여 기울기 저장&lt;/li&gt;
&lt;li&gt;가중치(기울기 평균) * Feature Map 합산 &amp;rarr; ReLU &amp;rarr; 정규화 &amp;rarr; 업샘플링&lt;/li&gt;
&lt;li&gt;원본 이미지에 히트맵 오버레이&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. 결과&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lKpdA/dJMcadhyljU/GwbvNfIOMp5C519bGr1EYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lKpdA/dJMcadhyljU/GwbvNfIOMp5C519bGr1EYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lKpdA/dJMcadhyljU/GwbvNfIOMp5C519bGr1EYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlKpdA%2FdJMcadhyljU%2FGwbvNfIOMp5C519bGr1EYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;688&quot; height=&quot;361&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 빨간/주황 영역 (모델이 집중한 부위&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뇌 중앙부와 뇌실(Ventricle) 주변에 집중&lt;/li&gt;
&lt;li&gt;ResNet50 결과보다 더 중앙에 집중된 히트맵&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 파란 영역 (모델이 무시한 부위)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두개골 경계&lt;/li&gt;
&lt;li&gt;뇌 외곽 전체&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 구조는 EfficientNet-B0으로 뇌종양에 적합한 구조인데 학습 데이터가 ImageNet(고양이, 강아지, 자동차 등)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 Saliency Map이 어떤 식으로 나오는지 실습하는 것이기 때문에 현재로서는 결과에 대해서 큰 의미는 없다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[6]. 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Saliency Map은 모델이 이미지를 보고 예측할 때 &quot;어느 픽셀에 집중했는가&quot;를 기울기로 측정하여 히트맵으로 시각화한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VAnilla &amp;rarr; Guided &amp;rarr; Grad-CAMM 순으로 발전했으며, 종앙 MRI에서는 Grad-CAM이 표준이다. 단, &quot;모델이 어디를 봤는가&quot;는 알려주지만 &quot;왜 그게 중요한가&quot;는 알려주지 않는다는 한계가 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/AI</category>
      <category>AI</category>
      <category>Grad-CAM</category>
      <category>Saliency Map</category>
      <category>XAI</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/24</guid>
      <comments>https://perry03.tistory.com/24#entry24comment</comments>
      <pubDate>Thu, 30 Apr 2026 14:43:46 +0900</pubDate>
    </item>
    <item>
      <title>Activation Function (활성화 함수)</title>
      <link>https://perry03.tistory.com/23</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[1]. Activation Function란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공 신경망에서 이전 층의 가중치 합을 입력받아 비선형성을 추가하고, 다음 층으로 전달할 최종 출력값을 결정하는 함수다..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 이해하기 위해서는 뉴런 구조를 알야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. 뉴런 구조&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뉴런 구조는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값 &amp;rarr; [Net Input Function] &amp;rarr; [Activation Function] &amp;rarr; 출력 순으로 이뤄진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Net Input Function : 입력값 x 가중치를 모두 더함&lt;/li&gt;
&lt;li&gt;Activation Function : Net Input Function의 합계를 받아서 최종 출력값으로 변환&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 설명하면 아파트 경비실 CCTV 시스템과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아파트 경비실에 여러 센서가 있는데&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문 열림 감지 센서 (가중치 높음)&lt;/li&gt;
&lt;li&gt;움직임 감지 센서 (가중치 중간)&lt;/li&gt;
&lt;li&gt;소리 감지 센서 (가중치 낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Net Input Function : 각 센서 값 x 중요도를 전부 더해서 &quot;위험 점수&quot;를 계산&lt;/li&gt;
&lt;li&gt;Activation Function : 위험 점수를 보고 경보를 어떻게 울릴지 결정 (비상, 안내 방송, 긴급 등등..)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 점수가 낮으면 = 조용히&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 일정 점수가 넘으면 = 경보 울림&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. 활성화 함수는 왜 필요한가?&amp;nbsp;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 층이 &quot;그냥 곱하고 더하기&quot;만 한다면 결국 수학적으로 하나의 &quot;곱하고 더하기&quot;로 압축된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예) :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1층 : y = 2x + 1&lt;/li&gt;
&lt;li&gt;2층 : z = 3y + 1&lt;/li&gt;
&lt;li&gt;1층을 2층에 대입하면 z = 3(2x + 1) + 2 = 6x + 5&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;층이 2개였지만, 결국 1층짜리 선형 계산과 완전히 동일하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;100층을 쌓아도 결과는 같다. 항상 ax + b 형태로 붕괴된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Activation Function은 이 &quot;붕괴&quot;를 막는 장치다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 층 사이에 &quot;구부러지는 지점&quot;을 만들어줘서, 층을 쌓을수록 표현할 수 있는 형태가 복잡해진다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;직선만 그릴 수 있던 시스템이 곡선, S자, 꺾인 선 등 복잡한 경계를 그릴 수 있게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{3}. 비선형성과 모델 성능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비선형성의 차이가 머신러닝과 딥러닝의 성능 차이로도 이어진다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 44.7656%; height: 98px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.2608%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 18.0494%;&quot;&gt;머신러닝&lt;/td&gt;
&lt;td style=&quot;width: 18.1332%;&quot;&gt;딥러닝&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.2608%;&quot;&gt;데이터&lt;/td&gt;
&lt;td style=&quot;width: 18.0494%;&quot;&gt;*정형 데이터&lt;/td&gt;
&lt;td style=&quot;width: 18.1332%;&quot;&gt;*비정형 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.2608%;&quot;&gt;비선형성&lt;/td&gt;
&lt;td style=&quot;width: 18.0494%;&quot;&gt;상대적으로 낮음&lt;/td&gt;
&lt;td style=&quot;width: 18.1332%;&quot;&gt;상대적으로 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝이 비정형 데이터에서 강한 이유는 활성화 함수로 인한 *높은 비선형성이 만들어지기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 비선형 모델은 과적합 위험이 상대적으로 높다는 트레이드오프가 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Computer Vision NLP 등 딥러닝이 뛰어난 성과를 내는 분야의 데이터는 모두 비정형 데이터이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 복잡한 패턴을 학습하는 핵심 이 활성화 함수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;? 정형 데이터&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;미리 정해 놓은 형식과 구조에 따라 저장되도록 구성하여 고정된 필드에 저장된 데이터이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;엑셀 스프레드시트, 관계형 데이터베이스 테이블처럼 형식이 엄격하여 기계가 읽고 분석하기 매우 쉬운 데이터 형태를 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;? 비정형 데이터&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정의된 구조가 없는 동영상 파일, 오디오 파일, 사진, 보고서, 메일 본문 등과 같이 정형화되지 않은 데이터이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;형태가 없고 연산할 수 없는 데이터이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? 높은 비선형성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의는 입력값의 변화가 출력값에 비례하지 않는 성질이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비선형성을 만드는 건 비정형 데이터가 아니라, 활성화 함수 x 층의 개수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;층을 쌓을수록 활성화 함수가 겹겹이 적용되면서 비선형성이 누적되어 커진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝은 층이 많으니까 비선형성이 높다. 그래서 복잡한 비정형 데이터 패턴을 학습할 수 있는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[2]. 활성화 함수 종류&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{1}. Sigmoid&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 범위 : 0 ~ 1 (확률값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0~100점짜리 시험을 &quot;합격 확률&quot;로 바꾸는 변환기다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점수가 아무리 높아도 100%를 넘지 않고, 아무리 낮아도 0% 아래로 내려가지 않는다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 장점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 0~1 사이로 고정되어 확률로 해석하기 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곡선이 부드럽게 연결되어 미분이 가능하기 때문에 역전파에 사용할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 단점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. Vanishing Gradient (기울기 손실) 문제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid는 점수가 매우 높거나 매우 낮을 때 곡선이 거의 평평해진다. &amp;rArr; 기울기가 0에 수렴함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역전 파는 이 기울기를 뒤로 전달하면서 학습하는데, 층이 깊어질수록 0에 가까운 기울기를 계속 곱하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.1 x 0.1 x 0.1 x... &amp;rarr; 결국 앞쪽 층에는 기울기가 거의 전달되지 않아 학습이 멈춰버린다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 출력이 항상 양수 (0~1)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 0~1로만 나오기 때문에 평균이 0이 아니다. 이게 학습 방향을 한쪽으로 편향시켜 수렴 속도를 느리게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 연산 비용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*exp() 지수 계산이 포함되어 있어 ReLU 같은 단순한 함수보다 계산이 느리다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? exp()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자연로그의 밑인 오일러 수 e(약 2.71828)를 밑으로 하는 지수 함수 e^x를 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오일러 수는 지수함수 e^x를 사용해서 빠르게 증가하는데 왜 ReLU보다 속도가 느린가?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;e^x가 빠르게 증가한다 = 수학적 값의 변화 속도&lt;/li&gt;
&lt;li&gt;계산이 빠르다 = 컴퓨터가 연산하는 데 걸리는 시간&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ReLU : if x &amp;gt; 0이면 x, 아니면 0으로 비교 한 번에 끝난다.&lt;/li&gt;
&lt;li&gt;Sigmoid : 1 / (1 + e^(-x))를 하는데 e^(-x)를 구하려면 컴퓨터 내부적으로 테일러급수 등 복잡한 수식을 여러 단계에 계산해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{2}. Tanh (하이퍼볼릭 탄젠트)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 범위 : -1 ~ +1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid가 &quot;0~100% 확률계&quot;라면, Tanh는 &quot;-100~+100 온도계&quot;이다. 음수도 표현할 수 있어 더 풍부한 신호를 전달한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 48.721%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.1575%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 58.3491%;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.1575%;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;width: 58.3491%;&quot;&gt;음수 표현 가능, Sigmoid보다 수렴 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.1575%;&quot;&gt;단점&lt;/td&gt;
&lt;td style=&quot;width: 58.3491%;&quot;&gt;여전히 Vanishing Gradient 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.1575%;&quot;&gt;사용 위치&lt;/td&gt;
&lt;td style=&quot;width: 58.3491%;&quot;&gt;CNN에서는 거의 미사용/*RNN에서 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;? RNN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 순서(시퀀스)를 기억하고 처리하는 딥러닝 모델이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이퍼볼릭 함수는 우리말로 쌍곡선 함수라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쌍곡선은 삼각함수(sin, cos)가 원을 매개변수로 표시하는 것과 똑같은 구조다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원 위의 점 : x^2 + y^2 = 1&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x = cos(t)&lt;/li&gt;
&lt;li&gt;y = sin(t)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쌍곡선 위의 점 : x^2 - y^2 = 1&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x = cosh(t)&lt;/li&gt;
&lt;li&gt;y = sinh(t)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;매개변수로 표시한다&quot; = 점의 위치를 t 하나로 표현한다는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하면, 시곗바늘 끝이 그리는 궤적이 원이고, 그 위치를 각도 t 하나로 표현하는 게 cos/sin이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tanh는 원 대신 쌍곡선 위에서 같은 역할을 하는 함수인 것이고&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{3}. ReLU&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 범위 : 0 ~ 무한대&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f(x) = max(0, x)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ReLU는 문지기다. 양수 신호는 그대로 통과시키고, 음수 신호는 무조건 차단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값이 0보다 작으면 0, 0보다 크면 입력값 그대로(f(x) = max(0, x)) 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산이 빠르고 기울기 소실 문제를 해결해준다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 49.6512%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;Vanishing Gradient 문제 효과적으로 해결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;단점&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;음수 값 표현 불가 (Leaky ReLU로 보완)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;사용 위치&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;Hidden Layer (현대 딥러닝의 기본값)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;{4}. Softmax&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 범위 : 각 클래스의 확률 (전체 합 = 1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력받은 값들을 0~1 사이의 확률값으로 정규화하여 출력의 총합을 1로 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid는 이진 분류, Softmax는 다중 분류의 출력층에 사용된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반에서 선거를 할 때 후보 A, B, C의 득표수를 전체 합으로 나눠서 &quot;A가 50%, B가 30%, C가 20%처럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체가 100%가 되도록 만든다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1). 장점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출력값을 전부 더하면 항상 1이 되어 확률 분포로 해석 가능&lt;/li&gt;
&lt;li&gt;여러 클래스 중 어느 클래스인지 확률로 비교할 수 있다. &amp;rarr; 위에 투표 비유&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2). 단점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. Vanishing Gradient&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sigmoid와 같은 문제이다. 한 클래스의 값이 압도적으로 크면 나머지 클래스의 출력이 0에 가까워지고, 기울기가 0에 수렴한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 연산 비용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 클래스의 e^x를 계산한 뒤 합으로 나눠야 해서 클래스가 많아질수록 계산량이 증가한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 극단적인 확률 수렴&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 클래스의 입력값이 조금만 커도 확률이 1에 몰리고 나머지는 0에 몰리는 경향이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출처 :&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/zalesia2020/222148881355&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://m.blog.naver.com/zalesia2020/222148881355&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777438076756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;정형 데이터 비정형 데이터, 반정형 데이터 개념&quot; data-og-description=&quot;빅데이터 시대에는 방대한 양의 데이터가 아주 빠른 속도로 생성되므로 데이터를 수집하고 분석하는 과정이...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/zalesia2020/222148881355&quot; data-og-url=&quot;https://blog.naver.com/zalesia2020/222148881355&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NB9IT/dJMb8T92GcJ/8HUi0wl8MK4as0ucZ4TTik/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/zalesia2020/222148881355&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/zalesia2020/222148881355&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NB9IT/dJMb8T92GcJ/8HUi0wl8MK4as0ucZ4TTik/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;정형 데이터 비정형 데이터, 반정형 데이터 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;빅데이터 시대에는 방대한 양의 데이터가 아주 빠른 속도로 생성되므로 데이터를 수집하고 분석하는 과정이...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gooopy.tistory.com/54&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gooopy.tistory.com/54&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777441616906&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;딥러닝-3.3. 활성화함수(4)-하이퍼볼릭 탄젠트 함수(tanh)&quot; data-og-description=&quot;지난 포스트에서는 시그모이드 함수에서 발전한 소프트맥스 함수에 대해 학습해보았다. 이번 포스트에서는 시그모이드 함수와 꽤 유사하면서, 시그모이드 함수의 단점을 보완한 하이퍼볼릭 탄&quot; data-og-host=&quot;gooopy.tistory.com&quot; data-og-source-url=&quot;https://gooopy.tistory.com/54&quot; data-og-url=&quot;https://gooopy.tistory.com/54&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b5nK8H/dJMb8VNyDvq/xmJDGbJkDglINXQ7R9a4DK/img.png?width=800&amp;amp;height=234&amp;amp;face=0_0_800_234,https://scrap.kakaocdn.net/dn/jw9oo/dJMb9efg8v9/kwK1rJIY8wF1e5D9Jj7Sh1/img.png?width=800&amp;amp;height=234&amp;amp;face=0_0_800_234,https://scrap.kakaocdn.net/dn/cflz6y/dJMb9dHrkhQ/uVZO1GN52h0SeiESxSzZN1/img.png?width=604&amp;amp;height=463&amp;amp;face=0_0_604_463&quot;&gt;&lt;a href=&quot;https://gooopy.tistory.com/54&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gooopy.tistory.com/54&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b5nK8H/dJMb8VNyDvq/xmJDGbJkDglINXQ7R9a4DK/img.png?width=800&amp;amp;height=234&amp;amp;face=0_0_800_234,https://scrap.kakaocdn.net/dn/jw9oo/dJMb9efg8v9/kwK1rJIY8wF1e5D9Jj7Sh1/img.png?width=800&amp;amp;height=234&amp;amp;face=0_0_800_234,https://scrap.kakaocdn.net/dn/cflz6y/dJMb9dHrkhQ/uVZO1GN52h0SeiESxSzZN1/img.png?width=604&amp;amp;height=463&amp;amp;face=0_0_604_463');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;딥러닝-3.3. 활성화함수(4)-하이퍼볼릭 탄젠트 함수(tanh)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 포스트에서는 시그모이드 함수에서 발전한 소프트맥스 함수에 대해 학습해보았다. 이번 포스트에서는 시그모이드 함수와 꽤 유사하면서, 시그모이드 함수의 단점을 보완한 하이퍼볼릭 탄&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gooopy.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/AI</category>
      <category>AI</category>
      <category>활성화함수</category>
      <author>페에이리</author>
      <guid isPermaLink="true">https://perry03.tistory.com/23</guid>
      <comments>https://perry03.tistory.com/23#entry23comment</comments>
      <pubDate>Wed, 29 Apr 2026 16:08:16 +0900</pubDate>
    </item>
  </channel>
</rss>