<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>귀퉁이 서재</title>
    <link>https://bkshin.tistory.com/</link>
    <description>인공지능과 데이터, 그리고 책을 다루는 블로그입니다 :)</description>
    <language>ko</language>
    <pubDate>Tue, 26 May 2026 21:51:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Baek Kyun Shin</managingEditor>
    <image>
      <title>귀퉁이 서재</title>
      <url>https://tistory1.daumcdn.net/tistory/3079975/attach/d9f884b2e5e046529548c7046d48756e</url>
      <link>https://bkshin.tistory.com</link>
    </image>
    <item>
      <title>고려대학교 AI 야간대학원 세 번째 학기를 마치며</title>
      <link>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%84%B8-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0</link>
      <description>&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;고려대학교 SW&amp;middot;AI융합대학원 인공지능융합학과에서의 세 번째 학기를 마쳤습니다. 지난 &lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%91%90-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;두 번째 학기 후기&lt;/a&gt;에서 '공부란 무엇인가'에 대해 되짚어 보았습니다. 출판 작업 때문에 1년 휴학 후 이번에 복학을 했는데, 이번 학기 역시 &quot;AI 시대, 공부란 무엇인가?&quot;, &quot;학교는 어떤 역할을 하는가?&quot;에 대해 더 고민했던 시간이었습니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;학기가 지날수록 기술 변화 속도는 무서울 정도로 빨라지고 있습니다. 그 속도감 속에서 대학원 생활이 제게 주는 의미도 변해가는 것 같네요. 이번 학기에 배운 내용과 사유의 기록을 정리해 봅니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&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 data-path-to-node=&quot;6&quot;&gt;&lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%A9%B4%EC%A0%91-%ED%9B%84%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;고려대학교&amp;nbsp;AI&amp;nbsp;야간대학원&amp;nbsp;면접&amp;nbsp;후기&lt;/a&gt;&lt;/li&gt;
&lt;li data-path-to-node=&quot;6&quot;&gt;&lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%B2%AB-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;고려대학교&amp;nbsp;AI&amp;nbsp;야간대학원&amp;nbsp;첫&amp;nbsp;학기를&amp;nbsp;마치며&lt;/a&gt;&lt;/li&gt;
&lt;li data-path-to-node=&quot;6&quot;&gt;&lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%91%90-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;고려대학교&amp;nbsp;AI&amp;nbsp;야간대학원&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;학기를&amp;nbsp;마치며&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size23&quot;&gt;AI 시대, 학교의 역할은 무엇인가?&lt;/h3&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;이번 학기 내내 저를 따라다녔던 질문이 있습니다.&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;6&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&quot;바이브 코딩이 자유롭고 AI 성능도 압도적인 이 시대에, 학교 교육의 역할은 무엇인가?&quot;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;사실 명확한 커리큘럼만 있다면, 생성형 AI를 활용해 혼자 학습하는 게 훨씬 빠르고 효율적일 수 있겠다는 생각이 학기 내내 들었습니다. 지식 전달이라는 측면에서만 보면 학교는 이미 AI의 상대가 되지 않을지도 모릅니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그렇다면 오늘날 학교 공부란 'AI가 주는 편리함에 중독되어 사고하는 근육이 퇴화하는 것'을 막기 위한 일종의 재활 훈련일 뿐일까요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 결론이 나면 현재의 모든 교육체계나 패러다임이 바뀌어야 합니다. 비관적으로 말이죠. 그런데 그렇게 될 리는 없겠지요. 어쨌든 공부의 의미, 학교의 역할에 대한 재정의가 필요해 보였습니다. 고민 끝에, 저 나름대로 이렇게 정의를 해봤습니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;822&quot; data-start=&quot;538&quot; data-ke-style=&quot;style2&quot;&gt;(AI 측면에서의) 공부는 더 이상 '정답을 찾는 역량'을 쌓기 위한 과정이 아니다. 대신 &lt;u&gt;&lt;b&gt;'질문을 제대로 하는 역량'&lt;/b&gt;&lt;/u&gt;과 &lt;u&gt;&lt;b&gt;'판단할 수 있는 역량'&lt;/b&gt;&lt;/u&gt;을 기르기 위한 과정으로 발전했다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-end=&quot;822&quot; data-start=&quot;538&quot; data-ke-size=&quot;size16&quot;&gt;AI에게 &quot;무엇을 기획해줘&quot;라고 하면 근사하게 만들어줍니다. 그런데 현실의 문제는 보통 '질문이 잘못되어서' 일어납니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;예컨대 &quot;매출을 올려줘&quot;는 질문이 아니라 바람에 가깝습니다. 진짜 질문은 &quot;어떤 고객의 어떤 행동을 어떤 방식으로 바꾸면 매출이 오를지 어떤 측면에서 알려줘&quot; 같은 형태입니다. AI는 질문을 받으면 제법 그럴싸한 답을 줍니다. 그렇지만 우리의 문제가 무엇이며, 따라서 무엇을 물어야 하는지는 여전히 사람이 알아야 합니다. 이런 관점에서 공부는 '질문을 날카롭게 만드는 훈련'이라고 볼 수 있겠죠.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;263&quot; data-end=&quot;536&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;또한, AI가 설계뿐만 아니라 검증도 해줍니다만, 그 검증은 대개 '자기 검증'입니다. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;그래서 공부는 정답을 외우는 것보다,&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;어떤 증거면 충분한지,&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;어떤 실험이면 믿을 만한지,&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;어떤 오류가 숨어 있는지를 판단하는 눈을 만드는 일이라고 볼 수 있습니다. AI가 그럴듯하게 돌아가는 코드는 잘 만들어도, 그 시스템이 장기적으로 안전하게 굴러가는지에 대한 책임은 온전히 사람에게 있기 때문이죠. 공부는 바로 그 '문제없게 만드는 감각'을 키우는 일이라고도 볼 수 있겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;263&quot; data-end=&quot;536&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;앞서 말했듯, 혼자서 AI와 대화하며 공부하는 것은 효율적입니다. 멀리 대학원에 가지 않더라도 내 방에서 간편히, 저렴한 비용으로 엄청난 전문가에게 배울 수 있죠. 하지만, 그렇게 되면 나만의 세계에 갇히기 쉽습니다. 나만의 세계에 갇히지 않도록 여러 기술적 자극을 준다는 차원에서는 대학교(원)가 필요하다고 생각합니다. 더불어 학교 안에서는, 혼자 공부할 땐 하기 힘든 비판적 합의를 할 수도 있겠지요. 그러므로 AI가 대부분의 것들을 알려주는 상황에서도 학교는 여전히 필요합니다. 다만,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;이론과 개념을 알려주는 기존의 역할이 아니라, 다양한 차원에서 '판단의 눈'을 길러주는 자극제로써의 역할이 되어야 할 것입니다.&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;263&quot; data-end=&quot;536&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;그러면 이제 어떤 방식으로 공부를 해야 할까?&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;이제는 '어떻게(How)'보다는 '무엇을, 왜(What &amp;amp; Why)'에 더 집중해야 할 것 같습니다. 물론 '어떻게(How)'가 중요치 않다는 건 아닙니다. 어떻게 구현해야 효율적이고 효과적인지 모르는 상황에서 AI에게 마냥 맡기기엔 리스크가 너무 크죠. 다만 예전에는 프로그래밍, 데이터분석, 머신러닝 등을 할 때, &quot;이 기능을 어떻게 코드로 구현할 것인가?&quot;에 꽤 많은 시간을 할애했다면, 이제는 그 시간을 절약해 설계와 검증, 판단에 더 집중을 할 수 있게 되었습니다. 그만큼 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;'어떻게(How)'보다는 '무엇을, 왜(What &amp;amp; Why)'에&lt;span&gt; 더 집중할 환경이 조성됐다는 뜻입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;영화감독은 카메라 조작법을 완벽히 몰라도 영화를 찍을 수는 있지만, 어떤 장면이 '좋은 장면'인지 판단하는 안목이 없으면 명작을 만들 수 없습니다. 마찬가지로 AI에게 시켜 코드를 짤 수는 있지만, 그 코드가 최선인지, 보안상 결함은 없는지, 시스템 전체의 아키텍처와 정합성이 맞는지, 우리 도메인과 맞는지, 우리 고객에게 전달할 수 있는지 판단하는 것은 여전히 '공부한 사람'의 몫입니다. 이런 안목이 없다면 우리는 AI의 제안에 휘둘리는 수동적인 대리인이 되고 말겠죠.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;1171&quot; data-end=&quot;1297&quot; data-ke-size=&quot;size16&quot;&gt;같은 AI를 써도 결과가 천차만별인 이유는, 사람의 머릿속에 '기준'이 있느냐 없느냐의 차이라고 봅니다. 기준이 있는 사람은 AI에게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;목표, 제약, 우선순위, 비용, 보안, 사용자 경험, 결과물 형식을 명확히 전달하고, &lt;span&gt;AI가 만들어준&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;결과를 검토하고 반박하고 수정시키며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;실험으로 확인하겠죠.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기준이 없는 사람은 AI가 준 것을 무비판적으로 수용하고 말 것입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;공부는 내 머릿속에 그러한 판단의 기준을 만드는 일 아닐까 싶어요.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size23&quot;&gt;대학원, 여전히 다닐 가치가 있는가?&lt;/h3&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;사실, 대학원이 주는 실질적인 효용을 향한 확신은 지난 학기에 비해 다소 줄어들었습니다. 이전 회고글에서도 언급했듯이, 저에게 졸업장 내지는 석사 타이틀 자체는 그다지 필요한 것이 아닙니다. 저는 대학원 공부 자체가 하고 싶어서 석사에 진학을 했습니다. 대학원이 주는 실질적인 효용은 줄었지만, 그렇다고 회의감이 드는 건 아니에요. 대학원 생활을 직접 겪어보지 않았다면, AI 시대 교육의 역할에 대해 이토록 진지하게 고민해 볼 기회조차 없었을 것이기 때문이죠.&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;학창 시절,&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;중학교 1학년부터 3학년까지 3년 간 학원을 다녔는데, 중학교 3학년 말에 학원을 그만두었습니다. 3년 간 학원에서 배운 거라고는 '학원이 (적어도 내게는) 크게 도움되지 않는다는 사실'이었기 때문이었죠. 그 결과, 확신을 갖고 스스로 공부하며 고등학교를 보낼 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;마찬가지로, (야간)대학원 안으로 들어와 시스템을 경험했기에 가질 수 있게 된 비판적 시각, 그 자체가 제게는 의미 있는 수확입니다. 경험이 곧 관점이 된 셈이네요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-path-to-node=&quot;6&quot;&gt;과목별 후기&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;6&quot;&gt;1.&amp;nbsp;빅데이터와&amp;nbsp;정보검색&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-path-to-node=&quot;6&quot;&gt;이번 학기에서 가장 밀도 있게 배운 과목입니다. 초반에는 색인(Indexing), 검색 랭킹(Ranking), 성능 평가 등 전통적인 정보검색 이론을 다뤘습니다. 이후 ElasticSearch를 활용해 직접 검색엔진을 구축해 보는 프로젝트를 진행했고, 후반부에는 벡터 검색과 RAG(Retrieval-Augmented Generation), Agentic RAG, Multi-Hop 추론까지 다루었습니다. 더불어 팀 프로젝트로 LangChain, LangGraph를 활용해 RAG 에이전트 워크플로우를 설계해 보며, 서로가 개발한 결과물에 대해 발표하여 공유하기도 했습니다. 교수님께서 밀어붙이며 빡세게 강의를 하신 덕분에(?), 많은 내용을 배울 수 있었어요. 이번 학기에 들은 과목 중 가장 남는 게 많은 과목이었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-path-to-node=&quot;6&quot;&gt;중간고사는 배운 내용에 대한 주관식, 서술형 필기시험이었고, 기말고사는 특정 논문에 대해 정리/분석하는 페이퍼 작성이었습니다. 중간고사인 필기시험 점수는 교수님께서 구두로 말씀해주셨는데, 평균은 50점대였으며, 저는 95점으로 1등을 했습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;6&quot;&gt;2. 데이터 및 정보시각화&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-path-to-node=&quot;6&quot;&gt;과목명과 달리 실제로는 데이터 마이닝(Data Mining) 전반에 대해 배운 이론 중심 과정이었습니다. 데이터 전처리부터 시작해 패턴 마이닝, 분류, 클러스터링, 이상 탐지 등 데이터 분석의 뼈대가 되는 알고리즘을 학습했습니다. 이론 수업이라 실습이 없었다는 점이 아쉬웠습니다. 그래도 이론적 개념을 자세히 배웠다는 점은 나름대로 의미가 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-path-to-node=&quot;6&quot;&gt;세 번의 학기 동안 교수님께서 중간, 기말고사 점수의 전체 통계값과 득한 점수를 LMS에 정직하게 공유해주신 적은 처음이었습니다. 중간고사와 기말고사 둘 다 1등을 했더라고요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diskpD/dJMcabbNpeR/1Bf0wj4RMYzuKw2F8jGVh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diskpD/dJMcabbNpeR/1Bf0wj4RMYzuKw2F8jGVh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diskpD/dJMcabbNpeR/1Bf0wj4RMYzuKw2F8jGVh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiskpD%2FdJMcabbNpeR%2F1Bf0wj4RMYzuKw2F8jGVh1%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;971&quot; height=&quot;427&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-path-to-node=&quot;6&quot;&gt;3. 소셜미디어분석&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-path-to-node=&quot;6&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;495&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMjDAl/dJMcabv8bQK/LVqjYpPTFfpfmt8QDsRtd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMjDAl/dJMcabv8bQK/LVqjYpPTFfpfmt8QDsRtd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMjDAl/dJMcabv8bQK/LVqjYpPTFfpfmt8QDsRtd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMjDAl%2FdJMcabv8bQK%2FLVqjYpPTFfpfmt8QDsRtd1%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;495&quot; height=&quot;143&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-path-to-node=&quot;6&quot;&gt;이제 곧 아이가 태어납니다. 육아에 전념해야 하므로 남은 두 학기는 출석만 겨우 할 수 있지 않을까 싶어요. 그래도 괜찮습니다. 공부가 '질문하는 역량', '판단하는 눈'을 기르는 일이라면, 강의실에서 강의를 듣는 것만으로도 자극제로써 역할은 하리라 봅니다. (집에선 공부를 거의 못하게 되겠지만요 ^^ㅎㅎ)&lt;/p&gt;</description>
      <category>회고</category>
      <category>AI 야간대학원</category>
      <category>고대 야간대학원</category>
      <category>고려대 AI 대학원</category>
      <category>고려대 야간</category>
      <category>고려대 야간대학원</category>
      <category>고려대 인공지능융합학과</category>
      <category>고려대 직장인</category>
      <category>고려대 직장인 대학원</category>
      <category>야간대학원</category>
      <category>인공지능융합학과</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/324</guid>
      <comments>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%84%B8-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0#entry324comment</comments>
      <pubDate>Thu, 8 Jan 2026 23:24:52 +0900</pubDate>
    </item>
    <item>
      <title>논문 리뷰 - Large Language Models: A Survey 톺아보기</title>
      <link>https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Large-Language-Models-A-Survey-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 역사와 현재를 개괄할 수 있는 굉장히 도움 되는 논문인 &lt;a href=&quot;https://arxiv.org/pdf/2402.06196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Large Language Models: A Survey&lt;/a&gt;를 상세히 톺아보았습니다. 단순히 모델이나 성능 나열이 아니라, 통계적 언어 모델을 시작으로 LLM이 어떻게 발전해 왔는지, 어떤 기법들이 적용이 되었는지, LLM은 어떤 프로세스로 훈련이 되는지 등 꽤 상세하게 소개하는 논문이죠. LLM을 조망하는 데 꽤나 유용한 논문이라고 생각해 자세히 살펴봤습니다. 어떤 개념을 조망하는 데에는 Survey 논문이 제법 도움 되는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 번역을 넘어서 추가적인 개념 설명이나 비유적인 설명까지 곁들였습니다. 각 모델이나 기법, 개념 등에서 중요한 부분이나 정의에 해당하는 내용은 볼드체를 해두었고요. reference를 제외한 본문만 37페이지로 이루어진 논문이에요. 내용이 어지간히 많습니다. 그렇다보니 다 보는 데 시간이 좀 걸렸지만, 다 읽고 나니 LLM의 전체 흐름이 체계적으로 정리됐습니다. 나중에 다시 읽어볼 요량으로 자세히 정리해봤습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;I.&amp;nbsp;서론&amp;nbsp;(INTRODUCTION)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 모델링은 오랜 역사를 가진 연구 주제에요. 그 기원은 1950년대 섀넌(Shannon)이 정보 이론을 인간 언어에 적용했던 시절까지 거슬러 올라가죠. 그 이후로, 통계적 언어 모델링은 음성 인식이나 기계 번역에서부터 정보 검색에 이르기까지 여러 자연어 처리 작업의 기초가 되었습니다. &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;최근에는 방대한 텍스트로 사전 훈련된 트랜스포머 기반의 대규모 언어 모델(LLMs)이 발전하면서 언어 모델의 능력이 비약적으로 좋아졌습니다. 예를 들어, OpenAI의 ChatGPT는 단순한 자연어 처리뿐만 아니라, 범용적인 문제도 해결할 수 있죠. 이러한 발전으로 인해, LLM은 이제 범용 AI 에이전트나 인공 일반 지능(Artificial General Intelligence, AGI) 개발의 핵심적인 구성 요소(building block)가 되어가고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;최근 LLM 분야는 굉장히 빠르게 움직이고 있습니다. 새로운 연구 결과, 새로운 모델, 새로운 기술들이 몇 달, 심지어 몇 주 만에 발표가 될 정도죠. 상황이 이렇다 보니 AI 연구자나 실무자들은 자신의 과제에 맞는 LLM 기반 AI 시스템을 구축하기 위한 최고의 '레시피'를 찾는 데 어려움을 겪고 있습니다. 이를 위해 이 논문에서는 LLM의 발전 사항에 대한 종합적인 고찰을 합니다. 즉, LLM의 역사와 동향을 깔끔하게 정리해주는 '가이드북' 역할을 하겠다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LLM은 ① 신경망에 기반을 둔, ② 대규모의, ③ 사전 훈련된, ④ 통계적 언어 모델입니다.&lt;/b&gt; 최근 LLM이 비약적으로 성과를 내는 이유는 지난 수십 년에 걸친 언어 모델 연구 덕분이죠. 이 발전 과정을 총 네 가지 물결로 구분해볼 수 있습니다. 바로 통계적 언어 모델, 신경망 언어 모델, 사전 훈련된 언어 모델, 그리고 LLM입니다. 하나씩 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[첫 번째 물결] 통계적 언어 모델 (Statistical Language Models, SLMs)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 그럼 네 가지 물결 중 첫 번째인 통계적 언어 모델(Statistical Language Models, SLMs)에 대해 알아보겠습니다. SLM은 텍스트를 '단어들의 시퀀스'로 간주합니다. SLM의 대표적인 형태는 n-gram 모델로 알려진 마르코프 체인 모델(Markov chain models)입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;n-gram 모델이란?&lt;/b&gt;&lt;br /&gt;n-gram은 '연속된 n개의 단어 묶음'을 의미해요. 예를 들어 '3-gram' 모델은 '나는 학교에'라는 2개의 단어(n-1)를 보고, 그다음에 '간다'라는 단어(n번째)가 올 확률을 통계적으로 계산하는 방식이죠. 섀넌은 이런 간단한 모델로도 언어의 통계적 패턴을 파악할 수 있다는 것을 보여주었습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n-gram 모델은 바로 직전의 'n-1'개 단어를 바탕으로 다음에 올 단어의 확률을 예측하죠. 단어 확률은 텍스트 말뭉치에서 수집한 단어(혹은 n-gram)의 '빈도수(count)'를 사용해 추정합니다. &lt;b&gt;그렇기 때문에 통계적 언어 모델에서는 '데이터 희소성(data sparsity)' 문제가 발생합니다.&lt;/b&gt; 데이터 희소성 문제란, 훈련 데이터에서 한 번도 본 적 없는 단어나 n-gram에 대해 확률을 0으로 할당하는 문제를 말해요. 데이터 희소성 문제를 해결하기 위해 당시 &lt;b&gt;임시방편으로 '스무딩(smoothing)'이라는 기법을 사용했었습니다.&lt;/b&gt; 스무딩은 훈련 데이터에 없는 단어(혹은 n-gram)에도 아주 작은 확률을 부여하는 방법입니다. 즉, 모델의 확률 일부를 아직 보지 못한 n-gram을 위해 남겨두는 방식이죠. n-gram&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;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;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;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;nbsp;장&amp;nbsp;빼놓는&amp;nbsp;것과&amp;nbsp;비슷하지만,&amp;nbsp;모든&amp;nbsp;새로운&amp;nbsp;상황에&amp;nbsp;대처하기에는&amp;nbsp;역부족입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 자연어 처리 작업에 n-gram 모델을 활용해왔지만, 데이터 희소성 문제 때문에 자연어를 완벽하게 처리하지는 못했습니다. 스무딩 기법을 통해 임시방편으로 개선하긴 했지만 본질적인 문제를 해결하진 못했죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[두 번째 물결] 초기 신경망 언어 모델(Early Neural Language Models, NLMs)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계 모델의 '데이터 희소성' 문제를 해결하기 위해 등장한 두 번째 물결은 초기 신경망 언어 모델입니다. &lt;b&gt;초기 신경망 언어 모델들은 단어들을 저차원의 연속적인 벡터(low-dimensional continuous vectors), 즉 '임베딩 벡터(embedding vectors)'로 매핑해서 데이터 희소성 문제를 해결했습니다.&lt;/b&gt; 그리고 이 모델들은 신경망을 사용하여, 이전 단어들의 임베딩 벡터들을 종합하여 다음 단어를 예측했죠. 신경망 언어 모델이 학습한 임베딩 벡터는 '은닉 공간(hidden space)'을 형성합니다. 이 은닉 공간에서는 임베딩 벡터들 간의 의미적 유사도를 그들의 '거리'로 쉽게 계산할 수 있습니다. 임베딩 벡터가 만드는 '은닉 공간'은 '의미의 지도'에 비유할 수 있어요. 이 지도 위에서 '왕'과 '남자'의 관계는 '여왕'과 '여자'의 관계와 비슷하게 표현됩니다. NLM은 바로 이 '의미의 지도'를 만드는 법을 배운 것이고, 덕분에 단어의 의미를 훨씬 더 깊이 있게 이해할 수 있게 된 거죠. 이러한 발전은, 입력의 형태나 언어, 심지어는 데이터의 종류에 관계없이, 어떤 두 입력 사이에 의미가 얼마나 비슷한지를 측정할 수 있는 길을 열어주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그런데 초기 신경망 언어 모델은 '특정 작업에만 특화된(task-specific)' 모델이었습니다.&lt;/b&gt; 즉, 특정 작업에 맞는 데이터로 훈련되었고, 그 결과로 학습된 '은닉 공간(hidden space)' 역시 그 특정 작업에만 맞춰져 있었습니다. 다시 말해, 초기 NLM은 '한 가지 일만 잘하는 전문가'였고, 이 때문에 새로운 작업을 할 때마다 모델을 처음부터 다시 만들어야 하는 한계가 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[세 번째 물결] 사전 훈련된 언어 모델(Pre-trained Language Models, PLMs)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 신경망 언어 모델이 task-specific하다는 한계를 극복한 세 번째 물결은 사전 훈련된 언어 모델(Pre-trained Language Models, PLMs)입니다. 초기 신경망 언어 모델(NLM)과 달리, &lt;b&gt;사전 훈련된 언어 모델(PLM)은 '특정 작업에 구애받지 않습니다(task-agnostic)'. &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PLM의 핵심은 '사전 훈련과 파인튜닝(pre-training and fine-tuning)'에 있습니다.&lt;/b&gt; 이 방식에서는, 순환 신경망(RNN)이나 트랜스포머 같은 언어 모델을 먼저 레이블이 없는(unlabeled) 방대한 텍스트 코퍼스를 가지고 단어 예측과 같은 일반적인 작업을 할 수 있도록 '사전 훈련'시킵니다. 그 후, 이 PLM을 레이블이 있는(labeled) 소량의 특정 작업용 데이터를 사용하여 해당 작업에 맞게 '파인튜닝'합니다. 비유하자면, 의대생들이 배우는 '범용 기초 교육'과 '전공 심화 교육'으로 비유할 수 있어요. '사전 훈련'은 의대생이 모든 과목의 기초를 배우는 과정과 같고(범용적), '파인튜닝'은 그 의대생이 나중에 '안과'나 '정형외과'처럼 특정 분야의 전문의가 되기 위해 추가 수련을 받는 것과 같죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[네 번째 물결] 거대 언어 모델(Large Language Models, LLM)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네 번째 물결은 거대 언어 모델(LLM)입니다. LLM은 주로 수백억에서 수천억 개의 파라미터를 가진 트랜스포머 기반의 신경망 언어 모델을 의미합니다. 그 유명한 PaLM, LLaMA, GPT-4들이 여기에 해당하죠. LLM은 방대한 텍스트 데이터로 사전 훈련이 된 모델입니다. 이전의 사전 훈련 모델(PLM)과 비교했을 때, LLM은 단순히 모델 크기가 훨씬 더 클 뿐만 아니라, 더 강력한 언어 이해 및 언어 생성 능력을 갖고 있습니다. &lt;b&gt;그리고 더 중요한 점은, 작은 규모의 언어 모델에서는 나타나지 않았던 '창발적 능력(emergent abilities)'을 보인다는 것입니다.&amp;nbsp;&lt;/b&gt; 창발적 능력이란 이전에 없던 완전히 새로운 능력을 일컫습니다. &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;정리하면, LLM과 기존의 PLM의 핵심적인 차이점은 두 가지입니다. 첫째는 '규모(scale)'의 차이, 둘째는 그 규모 덕분에 나타나는 질적인 변화, 즉 '창발적 능력'입니다. 마치 물의 온도가 임계점을 넘으면 얼음이 되는 것처럼, 모델의 크기가 임계점을 넘으면서 이전에는 없던 새로운 능력이 나타난다는 의미죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM만이 가진 특별한 능력, 즉 '창발적 능력'에는 구체적으로 어떤 것들이 있는지 살펴보죠. 창발적 능력은 크게 세 가지로 나뉩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;문맥 내 학습 (in-context learning)&lt;/b&gt;: LLM이 추론 시점(inference time)에 프롬프트에 제시된 몇 가지 예시만 보고도 새로운 작업을 학습하는 능력입니다. 마치 처음 보는 보드게임을 할 때, 친구가 몇 판 시범을 보여주는 것만 보고도 바로 규칙을 배워서 게임을 할 수 있게 되는 것과 같아요. 모델을 따로 훈련시킬 필요 없이, 프롬프트 안에서 즉석으로 학습이 일어나는 거죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지시 따르기 (instruction following)&lt;/b&gt;: '지시 튜닝(instruction tuning)'을 거친 LLM이, 별도의 예시 없이도 새로운 유형의 작업에 대한 지시를 따를 수 있는 능력입니다(지시 튜닝이 무엇인지에 대해서는 3장 F절에서 다룹니다). 예시가 없어도 사람이 내리는 명령 그 자체를 이해하고 수행하는 능력을 말하죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다단계 추론 (multi-step reasoning)&lt;/b&gt;: LLM이 복잡한 작업을 중간 추론 단계로 나누어 해결하는 능력입니다. 수학 문제를 풀 때, 답만 바로 내놓는 것이 아니라 풀이 과정을 스스로 생각해서 답을 찾아가는 능력을 말해요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 LLM은 외부 도구를 사용하여 '증강(augmented)'될 수 있습니다. 이를 통해 LLM은 사용자 및 환경과 상호작용할 수 있게 됩니다. 뿐만 아니라, 상호작용을 통해 수집한 피드백 데이터를 바탕으로 지속적으로 스스로를 개선할 수도 있죠. 그 대표적인 예시가 바로 '인간 피드백 기반 강화학습(RLHF)'입니다.&amp;nbsp;이러한 증강 기술을 통해, LLM은 소위 'AI 에이전트(AI agents)'로 발전할 수 있습니다. AI 에이전트란, 환경을 감지하고, 결정을 내리고, 행동을 취하는 인공적인 실체를 말합니다. 과거 연구에서는 특정 작업이나 영역에 국한된 에이전트를 개발하는 데 집중해왔습니다. 하지만 LLM이 보여준 '창발적 능력' 덕분에, 이제는 LLM을 기반으로 한 '범용 AI 에이전트'를 구축하는 것이 가능해졌지요. 이러한 내용에 대해서는 4장에서 자세히 다룰 겁니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;II. 거대 언어 모델 (LARGE LANGUAGE MODELS)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM에 대해 살펴보기 전에 먼저 LLM의 기반이 되는 초기 사전 훈련 신경망 언어 모델부터 알아보겠습니다. 그런 다음 3대 LLM 계열인 GPT, LLaMA, PaLM에 대해 자세히 알아보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 초기 사전 훈련 신경망 언어 모델 (Early Pre-trained Neural Language Models)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜스포머가 등장하기 이전 시대의 역사를 먼저 요약해보겠습니다. 여러 선구자들에 의해 신경망 기반의 언어 모델이 등장했어요. 그중 벤지오(Bengio) 연구팀은 기존의 n-gram 모델에 버금가는 성능을 보인 최초의 신경망 언어 모델(NLM)을 개발했습니다. 그 후, 다른 연구를 통해 NLM이 기계 번역에 성공적으로 적용되기도 했죠. NLM이 본격적으로 대중화된 계기는 미콜로프(Mikolov)가 RNNLM이라는 오픈소스 NLM 툴킷을 공개하면서부터였습니다. 이후, 순환 신경망(RNN)과 여러 변형 모델들(가령, 장단기 메모리(LSTM)와 게이트 순환 유닛(GRU))에 기반한 NLM들이 기계 번역, 텍스트 생성, 텍스트 분류 등 다양한 자연어 처리 분야에서 널리 사용되었습니다. 즉, 초기 사전 훈련 신경망 언어 모델의 대표 주자가 바로 RNN, LSTM, GRU였던 거죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후, NLM 발전의 또 다른 이정표가 된 아키텍처, 즉 트랜스포머(Transformer)가 개발되었습니다. 트랜스포머는 문서 내 모든 단어에 대해, 각 단어가 다른 단어에 미치는 영향을 모델링하는 '어텐션 점수(attention score)'를 병렬로 계산합니다. 셀프-어텐션이라는 기법을 통해서 말이죠. 이러한 방식 덕분에 이전의 RNN보다 병렬화(parallelization)를 더 효율적으로 할 수 있게 됐습니다. 그래서 GPU에서 대규모 데이터를 바탕으로 거대 언어 모델을 효율적으로 사전 훈련(pre-train)하는 것이 가능해졌죠. 이렇게 사전 훈련한 언어 모델(PLM)들은 이후 많은 하위 작업(downstream tasks)에 맞게 파인튜닝(fine-tuned)될 수 있었고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 그럼 트랜스포머 기반의 초기 사전 훈련 모델(PLM)에는 어떤 종류가 있는지 알아보겠습니다. 이 초기 모델들은 신경망 구조에 따라 크게 세 가지로 나뉩니다. 바로 Encoder-only, Decoder-only, 그리고 Encoder-Decoder 모델입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) Encoder-only PLMs&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 가지 카테고리 중 첫 번째인 Encoder-only 모델에 대해 알아보겠습니다. 이름에서 알 수 있듯이, Encoder-only 모델은 오직 인코더(encoder) 네트워크로만 구성되어 있습니다. 이 모델들은 애초에 '언어 이해(language understanding)' 작업을 위해 만들어졌습니다. 예를 들어, 입력 텍스트를 토대로 클래스 레이블을 예측해야 하는 텍스트 분류(text classification)와 같은 작업들이 여기에 해당해요. Encoder-only은 '언어 이해 전문가', '요약 전문가' 등으로 비유할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 Encoder-only 모델로는 BERT가 있으며, BERT의 변형 모델인 ROBERTA, ALBERT, DeBERTa, XLM 등도 있습니다. 이 모델들이 각각 어떤 특징을 가졌는지 간략히 살펴보죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;BERT&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Encoder-only 모델의 대표 주자는 그 유명한 BERT입니다. BERT는 '&lt;b&gt;B&lt;/b&gt;idirectional &lt;b&gt;E&lt;/b&gt;ncoder &lt;b&gt;R&lt;/b&gt;epresentations from &lt;b&gt;T&lt;/b&gt;ransformers'의 약자로, 가장 널리 사용되는 Encoder-only 언어 모델 중 하나에요. BERT는 크게 세 가지 모듈로 이루어져 있습니다.&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;b&gt; 임베딩 모듈&lt;/b&gt;: 입력 텍스트를 컴퓨터가 이해할 수 있는 숫자 배열, 즉 임베딩 벡터 시퀀스(sequence of embedding vectors)로 변환하는 모듈입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;트랜스포머 인코더&lt;/b&gt;: BERT의 핵심 엔진으로, '임베딩 벡터(embedding vectors)'를 '문맥 표현 벡터(contextual representation vectors)'로 변환하는 여러 계층의 트랜스포머 인코더입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;완전 연결 계층&lt;/b&gt;: 최종 계층에 있는 '표현 벡터(representation vectors)'를 우리가 원하는 출력 형태(예: 원-핫 벡터)로 변환하는 부분입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 &lt;b&gt;BERT를 사전 훈련하는 방식은 마스크 언어 모델링(Masked Language Modeling, MLM)과 다음 문장 예측(Next Senteces Prediction, NSP)입니다.&lt;/b&gt; '마스크 언어 모델링'은 문장 중간중간에 빈칸을 뚫어놓고(마스킹을 해두고), 앞뒤 문맥을 보고 그 빈칸을 채우도록 훈련하는 방식입니다. '다음 문장 예측'은 두 문장이 논리적으로 연결되는지 계속 판단하며 다음 문장을 예측하는 방식입니다. 이렇게 사전 훈련한 BERT 모델에 분류기 계층(classifier layer)을 추가해 파인튜닝하면, 텍스트 분류, 질의응답, 언어 추론에 이르는 다양한 언어 이해 작업을 수행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;RoBERTa&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT의 성공에 영감을 받아 탄생한 첫 번째 후속 모델은 바로 RoBERTa(로버타)입니다. &lt;b&gt;RoBERTa는 기존의 BERT 구조는 그대로 두고, 훈련 방식과 모델 설계 전략을 변경해 성능을 극한으로 끌어올린 모델입니다.&lt;/b&gt; BERT의 '다음 문장 예측(NSP)'가 오히려 모델 성능을 해칠 수 있다고 판단해 과감히 제거하고, 그 외 세부적인 부분을 조정해 BERT의 성능을 뛰어넘었습니다. 모델의&amp;nbsp;구조뿐만&amp;nbsp;아니라&amp;nbsp;'어떻게&amp;nbsp;훈련시키느냐'가&amp;nbsp;성능에&amp;nbsp;얼마나&amp;nbsp;중요한지를&amp;nbsp;보여준&amp;nbsp;사례입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ALBERT&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ALBERT는 '파라미터 감소 기법'을 적용해, 모델의 크기를 줄이고 훈련 속도를 늘리는 데 집중한 모델입니다.&lt;/b&gt; 파라미터 감소 기법으로는 두 가지가 있습니다. 첫 번째 기법은 임베딩 행렬을 두 개의 더 작은 행렬로 나누는 것입니다. 두 번째 기법은 여러 그룹으로 나뉜 반복적인 레이어(계층)를 사용하는 것입니다. BERT라는 큰 모델을 경량화해 효율성을 도모한 모델이라고 볼 수 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;DeBERTa&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeBERTa(디버타)는 '&lt;b&gt;D&lt;/b&gt;ecoding-&lt;b&gt;e&lt;/b&gt;nhanced &lt;b&gt;BERT&lt;/b&gt; with Disentangled &lt;b&gt;A&lt;/b&gt;ttention(분리된 어텐션을 사용한 디코딩 강화 BERT)'의 약자입니다. &lt;b&gt;DeBERTa는 두 가지 기술을 이용해 BERT와 RoBERTa 모델을 개선한 모델입니다.&lt;/b&gt; 첫 번째 기술은 '분리된 어텐션 메커니즘(disentangled attention mechanism)'입니다. 이 방식에서는 각 단어를 '내용(content)을 인코딩하는 벡터'와 '위치(position)를 인코딩하는 벡터', 이렇게 두 개의 벡터를 사용하여 표현합니다. 단어의 '내용'과 '위치'가 담고 있는 정보가 다르다고 보고, 이 둘을 분리해서 처리하는 메커니즘입니다. 이를 통해 단어들 간 관계를 더 정교하게 파악하려고 한 거죠. 마치 우리가 사람을 평가할 때, 그 사람의 '말의 내용'과 '말하는 순서(맥락)'를 분리해서 생각하는 것과 같아요. BERT는 이 둘을 한데 섞어서 평가했다면, DeBERTa는 '내용은 내용대로', '위치는 위치대로' 따로 점수를 매긴 뒤 합산하여 더 정교하게 관계를 파악하는 것입니다. 두 번째 기술은 '향상된 마스크 디코더(enhanced mask decoder)'입니다. 이것은 모델 사전 훈련 시 마스크된 토큰을 예측하기 위해, 디코딩 레이어에 절대적인 위치 정보를 통합하여 사용하는 것입니다. 가령, MLM 훈련(빈칸 채우기)을 할 때, 빈칸 주변 단어들의 상대적인 관계뿐만 아니라, '이 빈칸이 문장 전체에서 몇 번째 자리에 있는가?'라는 절대적인 위치 정보까지 함께 고려하여 정답을 더 정확하게 맞히도록 돕는 기법인 거죠. 마지막으로, DeBERTa는 파인튜닝(fine-tuning) 단계에서 모델의 일반화 성능을 높이기 위해 '가상 적대적 훈련(virtual adversarial training)'이라는 새로운 기법도 사용했습니다. 모델에게 일부러 약간의 '노이즈'나 '가짜 데이터'를 보여주며 훈련시키는 방식이에요. 이런 '어려운 문제'들을 풀어보게 함으로써, 모델이 실제 세상의 다양하고 예측 불가능한 데이터에 더 잘 대처할 수 있도록 '맷집'을 길러주는 훈련법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ELECTRA&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ELECTRA(일렉트라)는 '대체 토큰 탐지(Replaced Token Detection, RTD)'라는 새로운 사전 훈련 방식을 사용해 효율성을 극대화한 모델입니다.&lt;/b&gt; RTD는 일부 단어를 그럴듯한 '가짜 단어'로 바꿔치기 한 뒤, 모델이 어떤 단어가 가짜인지를 찾아내도록 하는 방식입니다. 구체적으로 말하면, 입력을 마스킹하는 대신, 작은 '생성자(generator)' 신경망이 만든 그럴듯한 대체 단어로 일부 토큰을 바꿔치기하여 입력을 손상(corrupts)시킵니다. 그 후, ELECTRA는 손상된 토큰의 원래 단어를 예측하는 대신, '판별자(discriminative)' 모델을 훈련시켜 손상된 입력의 각 토큰이 생성자에 의해 대체된 것인지 아닌지를 예측하도록 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;XLM&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;XLM은 BERT를 다국어 환경으로 확장한 모델입니다.&lt;/b&gt; 이를 위해 두 가지 방법을 사용했죠. '단일 언어 데이터(monolingual data)만 사용하는 비지도 학습(unsupervised) 방식'과 번역 문장 쌍, 즉 '병렬 데이터(parallel data)를 사용하는 지도 학습(supervised) 방식'입니다. XLM은 제안되었을 당시, 교차 언어 분류, 비지도 및 지도 기계 번역에서 최고 수준의(state-of-the-art) 결과를 얻었습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) Decoder-only PLMs&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이해 전문가인 Decoder-only 계열에 대한 설명을 마치고, 다음 카테고리인 Decoder-only PLM으로 넘어가겠습니다. Decoder-only PLM은 생성 전문가라고 보면 됩니다. 가장 널리 사용하는 Decoder-only PLM 두 가지는 OpenAI가 개발한 GPT-1과 GPT-2입니다. 이 모델들은 이후에 등장할 더 강력한 LLM, 즉 GPT-3와 GPT-4의 기반이 되었죠. 하나씩 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;GPT-1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-1은 Decoder-only 트랜스포머 모델입니다. 레이블이 없는(unlabeled) 대규모 텍스트 데이터를 이용해 자기-지도 학습(self-supervised learning) 방식으로 '생성형 사전 훈련(Generative Pre-Training)'을 한 뒤, 특정 하위 작업(downstream task)에 대해 (훨씬 적은 데이터로) 파인튜닝을 한 모델이죠. &lt;b&gt;'사전 훈련 후 파인튜닝' 패러다임이 Decoder-only 모델에서도 아주 효과적이라는 사실을 처음으로 증명한 모델이 바로 GPT-1입니다.&lt;/b&gt; 이러한 훈련 방식이 광범위한 자연어 처리 작업에서 좋은 성능을 얻을 수 있다는 사실을 증명한 거죠. 이때 사용한 자기-지도 학습 방식은 '다음 단어 예측'이었습니다. GPT-1은 이후의 GPT 모델의 기반이 되었죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;GPT-2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-1에 이어 GPT-2가 등장했습니다. &lt;b&gt;GPT-2는 수백만 개의 웹페이지로 구성된 매우 큰 WebText 데이터셋으로 훈련시켰을 때, 별도의 파인튜닝 없이도 언어 모델이 특정 자연어 처리 작업을 수행할 수 있다는 점을 보여준 모델입니다.&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) Encoder-Decoder PLMs&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 사전 훈련 모델의 마지막 카테고리인 Encoder-Decoder PLM에 대해 알아보겠습니다. Encoder-Decoder PLM은 '이해 전문가'인 Decoder-only 모델과 '생성 전문가'인 Decoder-only 모델을 모두 사용해 '하나의 텍스트 시퀀스를 다른 텍스트 시퀀스로 변환(sequence-to-sequence)'하는 작업에 활용되는 통합 모델(unified model)입니다. 따라서 인코더-디코더 언어 모델은 설계상 언어 이해와 언어 생성 작업을 모두 수행할 수 있는 통합 모델입니다. 사실, 거의 모든 자연어 처리(NLP) 작업은 '하나의 텍스트 시퀀스를 다른 텍스트 시퀀스로 변환하는(sequence-to-sequence)' 작업이라고 볼 수 있어요. 이처럼 모든 NLP 작업을 sequence-to-sequence로 정의하면, 인코더가 입력을 이해하고 디코더가 출력을 생성하는 이 구조 하나로 모든 것을 해결할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 인코더-디코더 PLM으로는 T5, mT5, MASS, BART가 있습니다. 하나씩 간략히 살펴보죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;T5&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T5는 '&lt;b&gt;T&lt;/b&gt;ext-&lt;b&gt;t&lt;/b&gt;o-&lt;b&gt;T&lt;/b&gt;ext &lt;b&gt;T&lt;/b&gt;ransfer &lt;b&gt;T&lt;/b&gt;ransformer'의 약자로, 모든 자연어 처리(NLP) 작업을 '텍스트-투-텍스트' 작업으로 통일시킨 모델입니다. mT5는 T5의 다국어(multilingual) 버전으로, 101개 언어로 구성된 데이터셋으로 사전 훈련되었습니다. T5는 '만능 요리사'에 비유할 수 있습니다. 이 요리사는 '번역해줘', '요약해줘', '문법 고쳐줘' 와 같이, 어떤 요리 주문(작업)이 들어오든, 주문서(입력된 명령어)를 보고 요리(출력 텍스트)를 내놓는 단 하나의 방식으로 모든 것을 해결합니다. 그리고 mT5는 이 만능 요리사가 전 세계 101개국의 요리법까지 마스터한 버전이라고 할 수 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;MASS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MASS는&amp;nbsp;'&lt;b&gt;Ma&lt;/b&gt;sked&amp;nbsp;&lt;b&gt;S&lt;/b&gt;equence&amp;nbsp;to&amp;nbsp;&lt;b&gt;S&lt;/b&gt;equence pre-training(마스크된 시퀀스-투-시퀀스 사전 훈련)'의 약자입니다. 이 모델의 훈련 방식은 이렇습니다. 먼저, 문장에서 연속된 여러 토큰으로 이루어진 조각(fragment)을 무작위로 마스킹합니다. 인코더는 '이렇게 마스킹된 조각을 포함하는 문장'을 입력으로 받고, 디코더는 '마스킹된 조각'이 무엇이었는지를 예측합니다. 인코더-디코더 프레임워크를 활용해, 문장의 나머지 부분을 보고 문장의 특정 조각(fragment)을 복원하도록 훈련한 거죠. 이러한 방식을 통해, MASS의 인코더는 언어 임베딩(언어 이해)을, 디코더는 언어 생성 능력을 동시에 훈련할 수 있었습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;여기서 잠깐!&lt;br /&gt;Encoder-only 모델인 BERT도 마스크 언어 모델링(Masked Language Modeling, MLM) 방식으로 사전 훈련되었다고 했죠? 그런데 BERT는 단어 하나씩 마스킹해 사전 훈련했다면, MASS는 연속된 단어 덩어리를 통째로 마스킹한 채 사전 훈련을 했다는 차이가 있습니다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;BART&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BART는 임의의 '노이즈 함수(noising function)'로 텍스트를 손상시킨 뒤, 원본 텍스트를 복원하는 방식으로 사전 훈련한 모델입니다. 단어 순서를 뒤죽박죽 섞거나, 일부 단어를 지우거나, 아무 상관없는 단어를 중간에 끼워 넣는 등 아주 다양한 방식으로 텍스트를 손상시킨 뒤 복원하도록 한 거죠.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 거대 언어 모델 계열(Large Language Model Families)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 LLM의 직계 조상이라고 할 수 있는 초기 사전 훈련 모델(Early Pre-trained Models)에 대해 알아보았습니다. '이해 전문가'인 Encoder-only 모델(BERT, RoBERTa, ALBERT, DeBERTa, ELECTRA, XLM), '생성 전문가'인 Decoder-only 모델(GPT-1, GPT-2), 그리고 둘을 합친 '통합 전문가'인 Encoder-Decoder 모델(T5, mT5, MASS, BART)에 대해 간략히 살펴봤습니다. 이제 앞선 초기 모델들의 아이디어를 이어받아, 모델의 규모를 대폭 키운 거대 언어 모델 계열으로 넘어가보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거대 언어 모델(LLM)이란 수백억에서 수천억 개의 파라미터를 가진, 트랜스포머 기반의 사전 훈련 언어 모델을 일컫습니다. LLM은 이전의 언어 모델과 비교했을 때, 단순히 모델 크기가 훨씬 더 크다는 차이점만 있는 것이 아닙니다. 언어 이해나 언어 생성 능력이 훨씬 더 강력해졌습니다. 그리고 &lt;b&gt;가장 중요한 차이점은 창발적 능력(emergent abilities)을 보인다는 점&lt;/b&gt;입니다. 창발적 능력을 소규모 언어 모델에서는 나타나지 않던 능력이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 LLM 계열인 GPT, LLaMA, PaLM에 대해 소개하겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) GPT 계열&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GPT&lt;/b&gt;는 '&lt;b&gt;G&lt;/b&gt;enerative &lt;b&gt;P&lt;/b&gt;re-trained &lt;b&gt;T&lt;/b&gt;ransformers(생성형 사전 훈련 트랜스포머)'의 약자로, &lt;b&gt;텍스트 생성에 특화된 모델&lt;/b&gt;입니다. &lt;span&gt;이 모델은 OpenAI가 개발했으며, 우리가 앞서 배운 세 가지 구조 중 'Decoder-only 구조'를 기반으로 하고 있습니다. '생성 전문가'이기 때문이죠.&lt;span&gt;&lt;span&gt; 초기 모델인 GPT-1과 GPT-2는 오픈 소스였지만, GPT-3와 GPT-4 같은 최신 모델들은 기술을 공개하지 않는 클로즈 소스(close-source)입니다. 그래서 최신 GPT 모델을 사용하려면 API를 통해서만 접근이 가능합니다. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;GPT-1과 GPT-2는 앞서 이미 설명했으니 GPT-3부터 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;GPT-3 (진정한 LLM의 시작)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;GPT-3&lt;/span&gt;&lt;span&gt;는 &lt;/span&gt;&lt;span&gt;1,750억 개&lt;/span&gt;&lt;span&gt;의 파라미터를 가진 사전 훈련된 자기회귀(autoregressive) 언어 모델입니다&lt;/span&gt;. &lt;span&gt;GPT-3는 진정한 의미의 첫 LLM으로 인정받고 있습니다. 이전의 언어 모델들보다 훨씬 거대할 뿐만 아니라, 작은 모델에서는 관찰되지 않았던 &lt;/span&gt;&lt;span&gt;'창발적 능력(emergent abilities)'을 처음으로 선보였기 때문이죠. &lt;/span&gt;&lt;b&gt;&lt;span&gt;GPT-3가 보여준 가장 대표적인 창발적 능력은 바로 '문맥 내 학습(in-context learning)'입니다&lt;/span&gt;.&lt;/b&gt; 문맥 내 학습이란 무엇인지 앞서 이미 설명했죠? 다시 한번 말하자면, &lt;span&gt;모델의 가중치를 직접 업데이트하는 &lt;/span&gt;&lt;span&gt;파인튜닝(fine-tuning) 없이도&lt;/span&gt;&lt;span&gt;, 단순히 프롬프트에 몇 가지 예시('few-shot demonstrations')를 텍스트로 보여주는 것만으로 모델이 새로운 작업(downstream tasks)을 수행할 수 있다는 뜻입니다&lt;/span&gt;. 순전히 사용자가 텍스트로 몇 가지 예시만 줬을 뿐인데도 문맥 속에서 학습을 해 새로운 능력을 발휘하는 것이죠. &lt;span&gt;이러한 능력 덕분에 GPT-3는 번역이나 질의응답 같은 전통적인 NLP 작업뿐만 아니라, 단어 순서 맞추기, 새로운 문장 만들기, 덧셈 연산 같은 여러 작업에서도 강력한 성능을 보였습니다&lt;/span&gt;. &lt;span&gt;아래 그림은 프롬프트로 제시한 예시 개수가 늘어남에 따라 GPT-3의 성능이 어떻게 향상되는지를 보여주는 그림입니다. 파라미터가 많을수록, 그리고 예시 개수가 많을수록 정확도가 높아지네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2302&quot; data-origin-height=&quot;1282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvDbKg/btsPNdhiaDW/LVK9XtT5mjtGrh4ZUVD7E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvDbKg/btsPNdhiaDW/LVK9XtT5mjtGrh4ZUVD7E1/img.png&quot; data-alt=&quot;프롬프트 예시 개수에 따른 성능 비교 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvDbKg/btsPNdhiaDW/LVK9XtT5mjtGrh4ZUVD7E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvDbKg%2FbtsPNdhiaDW%2FLVK9XtT5mjtGrh4ZUVD7E1%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;390&quot; data-origin-width=&quot;2302&quot; data-origin-height=&quot;1282&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프롬프트 예시 개수에 따른 성능 비교 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;CODEX (코딩 전문가)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 논문은 GPT-3의 후손 격인 CODEX(코덱스)에 대해 알아봅시다. &lt;span&gt;&lt;b&gt;CODEX는 코드를 짜주는 모델&lt;/b&gt;이라고 보면 됩니다. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사람이 자연어로 어떤 코드를 짜달라고 명령하면 그에 맞는 코드를 생성해주죠. &lt;/span&gt;&lt;span&gt;CODEX는&amp;nbsp;&lt;/span&gt;&lt;span&gt;GPT-3를 파인튜닝해서 코딩을 잘하도록 만든 모델입니다. &lt;/span&gt;&lt;span&gt;즉, 범용적인 언어 능력을 가진 GPT-3에게 깃허브(GitHub)에서 수집한 방대한 양의 코드 데이터를 추가로 학습시켜 '코딩 전문가'로 만든 것이죠&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;WebGPT (웹 서핑 전문가)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 모델은 GPT-3의 또 다른 후손인 WebGPT입니다. &lt;span&gt;텍스트 기반의 웹 브라우저를 사용해서, &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사용자의 개방형 질문(open-ended questions)에 맞는 답변을 하도록 미세 조정된 모델이죠&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;즉, WebGPT는 스스로 웹 서핑을 하고 정보를 찾아서 답변을 생성하는 능력을 갖춘 거죠&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;. &lt;/span&gt;&lt;span&gt;WebGPT는 세 단계에 걸쳐 훈련됩니다&lt;/span&gt;.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;모방 학습&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: 처음에는 WebGPT가 아무것도 모릅니다. 그러니 '사람은 실제로 어떻게 웹 서핑을 통해 정보를 알아내는지'를 WebGPT가 배웁니다. '아, 저런 질문에는 저런 사이트에 접속해서 이런 정보를 찾아오는 거구나!' 하고 인간의 웹 브라우징 행동을 그대로 모방하는 방법을 배우는 것이죠.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보상 모델링&lt;/b&gt;: 이제 WebGPT가 어설프게나마 답변 생성을 하게 됩니다. WebGPT가 생성한 여러 답변을 보고 사람이 직접 어떤 답변이 더 좋은지 순위를 매깁니다. &lt;span&gt;그러면 모델은 이 평가 데이터를 모아서,&amp;nbsp;&lt;/span&gt;&lt;span&gt;'인간이 선호하는 답변이 무엇인지'를 예측하는 보상 모델&lt;/span&gt;&lt;span&gt;을 학습하게 됩니다&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;강화학습 및 거부 샘플링&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: 마지막으로 WebGPT는 2단계에서 만든 보상 모델로부터 '점수'를 받으면서, &lt;/span&gt;&lt;span&gt;가장 높은 점수를 받는 답변을 생성하도록&lt;/span&gt;&lt;span&gt; 스스로를 계속해서 개선해나갑니다.&lt;/span&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;이것이 바로 강화학습(reinforcement learning)입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이 과정을 통해 인간의 선호도에 더 잘 맞는 답변을 생성하게 되는 거죠. 더불어 거부 샘플링(rejection sampling) 기법도 적용합니다. 거부 샘플링은 보상 모델이 매긴 점수가 높은 답변만 선택하고 나머지는 버리는(reject) 방식입니다. 이 과정을 통해 답변의 품질을 더 확실하게 높이는 것입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;InstructGPT (인간의 지시를 따르도록 훈련된 모델)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;InstructGPT&lt;/span&gt;&lt;span&gt;는 다방면의 질문에 대해&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;사용자의 의도(user intent)에 맞게 응답하도록&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt; 훈련된 모델&lt;/b&gt;입니다.&lt;/span&gt; 예컨대, '이력서를 쓰는 방법을 알려주세요!'라고 질문을 했는데, 답변이 '워드 파일에 작성하면 됩니다.'라면 어떨까요? 사용자의 의도를 이해하지 못한 답변이겠죠? 단순히 답변을 생성하는 것을 넘어, '사람이 정말로 원하는 답변'을 하도록 파인튜닝된 모델이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;InstructGPT를 훈련하기 위해, OpenAI의 API를 통해 수집한 실제 사용자들의 프롬프트와 전문적인 데이터 레이블러(labeler)가 직접 작성한 프롬프트를 준비합니다.&lt;/span&gt;&amp;nbsp;&lt;span&gt;이어서 데이터 레이블러들이 직접 '이런 프롬프트에는 이런 답변이 바람직하다'는 예시 데이터를 만듭니다&lt;/span&gt;. 이 데이터를 활용해&amp;nbsp;&lt;span&gt;GPT-3는 1차적으로 파인튜닝합니다&lt;/span&gt;. &lt;span&gt;그다음 단계가 핵심인데요, 모델이 생성한 여러 답변에 대해 사람이 직접 선호도 순위를 매깁니다. 이 선호도 데이터를 이용해, 강화학습(reinforcement learning)을 통해 모델을 다시 한번 파인튜닝합니다. &lt;/span&gt;&lt;span&gt;이 훈련 기법이 바로 그 유명한 RLHF(Reinforcement Learning from Human Feedback, 인간 피드백 기반 강화학습)입니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 훈련된 InstructGPT 모델은, 공개된 NLP 데이터셋에서의 성능은 약간 떨어졌지만 진실함은 높아지고, 유해성은 줄어드는 등 전반적으로 인간의 의도에 더 잘 부합하는 성능을 보여주었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;ChatGPT와 GPT-4 (LLM의 새로운 시대)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 이제 InstructGPT의 아이디어를 이어받아 LLM 개발의 가장 중요한 이정표가 된 모델, 바로 &lt;b&gt;ChatGPT(Chat&lt;/b&gt; &lt;b&gt;G&lt;/b&gt;enerative &lt;b&gt;P&lt;/b&gt;re-trained &lt;b&gt;T&lt;/b&gt;ransformer)에 대해 알아보겠습니다. ChatGPT는 2022년 11월 30일에 출시된 모델로 사용자가 대화를 통해 질의응답, 정보 탐색, 텍스트 요약 등 아주 광범위한 작업을 할 수 있게 해주는 챗봇입니다. ChatGPT는 InstructGPT의 형제 모델(sibling model)인 GPT-3.5를 기반으로 만들어졌어요. InstructGPT처럼 프롬프트의 지시를 따르고 상세한 응답을 제공하도록 훈련되었죠. 즉, InstructGPT에서 증명된 RLHF 기술을 대화형 챗봇에 적용하여, 누구나 쉽게 사용할 수 있도록 만든 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 2023년 3월에는 그다음 버전인 &lt;b&gt;GPT-4&lt;/b&gt;가 출시됩니다. GPT-4의 가장 큰 특징은 &lt;b&gt;멀티모달(multi-modal) LLM&lt;/b&gt;이라는 점이에요. 기존 모델들처럼 텍스트만 입력받는 것이 아니라, 이미지와 텍스트를 함께 입력받아 텍스트 결과물을 생성할 수 있게 되었다는 말입니다. GPT-4가 일부 현실 세계 문제에서는 인간보다 능력이 부족하지만, 다양한 전문직 시험이나 학술 시험에서는 인간 수준의 성능을 보여주었습니다. 예를 들어, 모의 변호사 시험에서 상위 10%에 해당하는 점수로 합격하는 놀라운 결과를 보여주었죠. 아래 그림을 보시죠. 여러 학술 시험 또는 전문직 시험에서 GPT-4가 얼마나 높은 점수를 달성했는지를 보여줍니다. 몇몇 시험에서는 100점에 가까운 점수를 보였죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rDljZ/btsPKRGWJYf/b08aSCYCg0QsjN6Ekmykb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rDljZ/btsPKRGWJYf/b08aSCYCg0QsjN6Ekmykb1/img.png&quot; data-alt=&quot;학술 시험 또는 전문직 시험에서의 GPT-4의 성능 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rDljZ/btsPKRGWJYf/b08aSCYCg0QsjN6Ekmykb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrDljZ%2FbtsPKRGWJYf%2Fb08aSCYCg0QsjN6Ekmykb1%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;800&quot; height=&quot;705&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;788&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;학술 시험 또는 전문직 시험에서의 GPT-4의 성능 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;GPT-4 역시 이전 모델들처럼 대규모 텍스트 데이터로 사전 훈련된 후, 인간의 의도에 부합하는 답변을 하도록&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;RLHF로 파인튜닝되었습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2)&amp;nbsp;LLaMA&amp;nbsp;계열&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 GPT 계열에 관한 긴 설명을 마칩니다. 자, 그럼 다음으로 LLaMA 계열에 대해 알아보도록 하죠. &lt;span&gt;LLaMA는 메타(Meta)에서 공개한 파운데이션 언어 모델들의 모음(collection of foundation language models)입니다.&amp;nbsp;&lt;/span&gt;LLaMA가 GPT 계열과 비교되는 가장 중요한 특징은 바로 오픈 소스(open-source)라는 점입니다. &lt;span&gt;논문에 따르면, LLaMA 모델들은 GPT와 달리&amp;nbsp;&lt;/span&gt;&lt;span&gt;모델의 가중치(weights)를 모두 공개했습니다. 상업적으로만 사용하지 않으면 이들을 가져다가 쓸 수 있죠. &lt;/span&gt;&lt;span&gt;이러한 개방성 덕분에, LLaMA 계열은 아주 빠르게 성장할 수 있었어요. &lt;/span&gt;&lt;span&gt;많은 연구자들이 LLaMA 모델을 활용하여, GPT 성능에 버금가는 오픈 소스 LLM을 개발하게 된 것이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;LLaMA&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2023년 2월에 처음 공개된 LLaMA 모델들은 70억(7B) 개부터 650억(65B) 개까지 다양한 크기의 파라미터로 구성되었습니다. &lt;/span&gt;&lt;span&gt;이 모델들은 공개적인 데이터셋에서 수집된 수조 개의 토큰으로 사전 훈련되었죠. LLaMA는 기본적으로 GPT-3의 트랜스포머 구조를 따르되, 몇 가지 구조를 개선했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;활성화 함수 변경&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: 기존의 ReLU 함수 대신 &lt;/span&gt;&lt;span&gt;SwiGLU 활성화 함수&lt;/span&gt;&lt;span&gt;를 사용했습니다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;위치 임베딩 변경&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: 절대적인 위치 임베딩(absolute opsitional embedding) 대신, 단어의 상대적인 위치 관계를 더 잘 파악할 수 있는 회전식 위치 임베딩(rotary positional embeddings)을 사용했습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;정규화 방식 변경&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: 일반적인 레이어 정규화(layer-normalizaion) 대신 RMSNorm(Root-Mean-Squared Layer-Normalization)을 사용했습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 개선 덕분에, 오픈 소스인 LLaMA-13B(130억 파라미터) 모델은 비공개 모델인 GPT-3(1750억 파라미터)보다 훨씬 작음에도 불구하고 대부분의 벤치마크에서 더 뛰어난 성능을 보여주었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;LLaMA-2와 파생 모델들&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2023년 7월, 메타는 마이크로소프트와 협력하여 LLaMA-2 컬렉션을 출시했습니다. LLaMA-2 컬렉션에는 파운데이션 언어 모델인 LLaMA-2와, 대화형으로 파인튜닝한 LLaMA-2 Chat이 포함되어 있죠. LLaMA-2 Chat 모델은 공개된 벤치마크에서 다른 오픈 소스 모델들을 능가하는 우수한 성능을 보여주었어요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLaMA-2 Chat의 훈련 과정은 이렇습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;사전 훈련:&lt;/b&gt; 먼저, 공개된 온라인 데이터를 이용해 LLaMA-2 파운데이션 모델을 사전 훈련합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지도 학습 기반의 파인튜닝&lt;/b&gt;: 그 후, 지도 학습 방식의 파인튜닝(supervised fine-tuning)을 통해 초기 버전의 Chat 모델을 만듭니다. 지도 학습 방식으로 파인튜닝을 하기 때문에 '이런 질문에는 이렇게 답하는 게 좋아'라는 정답지를 보여주며 학습시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RLHF, 거부 샘플링, PPO&lt;/b&gt;: 마지막으로,&amp;nbsp;RLHF(인간 피드백 기반 강화학습), 거부 샘플링(rejection sampling), 그리고 PPO(Proximal Policy Optimization; 근사 정책 최적화)와 같은 기술들을 적용해 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;모델을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;반복적으로 개선합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;PPO(Proximal Policy Optimizaion)란?&lt;/b&gt; &lt;br /&gt;강화학습에서 정책(policy)을 안정적이고 효율적으로 업데이트하기 Policy Gradient 알고리즘입니다. 정책을 한 번에 너무 크게 바꾸지 않으면서도 학습 효율을 유지하는 방법이라고 보면 됩니다. 비유를 들어 쉽게 설명하면, 강아지에게 새로운 훈련을 시킬 때, 너무 급하게 다그치면 강아지가 스트레스를 받고 오히려 훈련을 망칠 수 있죠? PPO는 모델이 RLHF를 통해 새로운 것을 배울 때, 기존에 잘하던 것들을 잊어버리거나 엉뚱한 방향으로 너무 멀리 가지 않도록 '보폭'을 조절해주는 역할을 합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림은 앞서 설명한 LLaMA-2의 세 가지 훈련 과정을 보여주는 그림입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zPCvk/btsPLYLY1by/RhybvFQ9gPKQs13yQS5PyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zPCvk/btsPLYLY1by/RhybvFQ9gPKQs13yQS5PyK/img.png&quot; data-alt=&quot;LLaMA-2 Chat의 훈련 과정 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zPCvk/btsPLYLY1by/RhybvFQ9gPKQs13yQS5PyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzPCvk%2FbtsPLYLY1by%2FRhybvFQ9gPKQs13yQS5PyK%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;1488&quot; height=&quot;668&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LLaMA-2 Chat의 훈련 과정 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Alpaca&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 LLaMA를 기반으로 탄생한 첫 번째 유명한 파생 모델, Alpaca(알파카)에 대해 알아보겠습니다. Alpaca는 LLaMA-7B(70억 파라미터) 모델을 기반으로 합니다. &lt;b&gt;이 모델의 가장 큰 특징은&amp;nbsp;적은 비용으로도 높은 성능을 낼 수 있다는 사실을 증명했다는 점&lt;/b&gt;이에요. Alpaca는 'self-instruct'라는 방식으로 파인튜닝되었습니다. 구체적으로 말하면 GPT-3.5를 이용해 생성한 52,000개의 지시 따르기(instruction-following) 예시 데이터로 파인튜닝이 되었어요. 즉, 더 똑똑한 모델(GPT-3.5)에게 '교사(선생님)' 역할을 맡겨 훈련 데이터를 대량으로 만들어낸 뒤, 그 데이터로 LLaMA를 학습시킨 거죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;self-instruct란?&lt;/b&gt; &lt;br /&gt;모델이 스스로 학습용 지시&amp;middot;응답 쌍(instruction&amp;ndash;response pairs) 데이터를 생성해내는 데이터 생성 기법을 뜻합니다. 즉, 사람이 일일이 질문과 답변을 작성하는 대신, 성능이 좋은 모델을 '교사 모델(teacher model)'로 삼아 새로운 학습 데이터를 자동으로 만드는 방식입니다. 이러한 데이터를 전부 사람이 만들면 시간과 비용이 너무 많이 들겠죠? 그래서 self-Instruct 방식이 등장했습니다. &lt;br /&gt;self-Instruct의 절차는 이렇습니다. 먼저 시드(seed) 데이터를 준비합니다. 시드 데이터란 사람이 만든 소규모의 고품질 지시&amp;middot;응답 쌍 데이터를 일컫습니다. &amp;rarr; 이어서 성능이 좋은 교사 모델(가령 GPT-3.5)에게 시드 데이터를 보여주고, '이런 형식으로 새로운 지시문을 만들어줘'라고 요청합니다. &amp;rarr; 생성된 각 지시문에 대해 다시 교사 모델이 응답을 작성하게 합니다. &amp;rarr; 중복되거나 무의미한 지시&amp;middot;응답 쌍 데이터는 제거합니다. &amp;rarr; 이렇게 만든 대규모 지시&amp;middot;응답 쌍 데이터를 바탕으로, 성능이 낮은 모델(가령 LLaMA)을 지도 학습하는 것입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;놀랍게도, Alpaca는 훨씬 작은 모델임에도 불구하고 자체 평가에서 GPT-3.5와 유사한 성능을 보였습니다. 이 결과는 학계 연구자들에게 &lt;b&gt;적은 예산으로도 충분히 강력한 LLM을 만들 수 있다&lt;/b&gt;는 희망을 주었죠. 정리하면, LLaMA-2 Chat은 인간의 피드백까지 동원하는 등 복잡하게 여러 단계를 거쳐 훈련되었지만, Alpaca는 GPT-3.5를 활용해 self-instruct 방식으로 훈련하여, 훨씬 적은 비용으로도 강력한 성능을 낼 수 있었습니다. LLM이 LLM을 가르치는 시대의 시작을 알린 중요한 사례입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Vicuna&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 모델은 Vicuna-13B(비쿠냐)입니다. 이름에서 알 수 있듯이 130억(13B) 개의 파라미터를 가진 챗봇 모델이죠. Vicuna의 가장 큰 특징은 훈련 데이터의 출처입니다. Alpaca는 'GPT-3.5를 통해 인공적으로 생성한 데이터를 이용해 LLaMA를 파인튜닝한' 모델이었죠? 그에 반해 &lt;b&gt;Vicuna는 ShareGPT라는 웹사이트에서 수집한, '사람들이 실제로 나눈 대화 데이터'를 사용하여 LLaMA를 파인튜닝한 모델입니다.&lt;/b&gt; 더 현실적이고 자연스러운 대화 데이터를 학습한 셈이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vicuna 연구팀은 흥미로운 방식으로 Vicuna-13B의 성능을 평가했습니다. 바로 GPT-4를 '심판'으로 삼아 다른 모델들과 대결시킨 거죠. 이 예비 평가에서 Vicuna-13B는 OpenAI의 ChatGPT나 구글 Bard의 90% 이상에 달하는 성능을 보여주었으며, LLaMA나 Alpaca 같은 다른 모델들보다는 90% 이상의 경우에서 더 뛰어난 성능을 보였다고 합니다. Vicuna-13B의 또 다른 장점은 훈련에 필요한 비용이 상당히 낮다는 점입니다. 논문에 따르면 이 강력한 모델을 훈련시키는 데 든 비용이 단돈 300달러(약 40만 원)에 불과했다고 합니다. 이는 Alpaca와 마찬가지로, 적은 비용으로도 고품질의 챗봇을 만들 수 있다는 것을 다시 한번 증명한 사례입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Guanaco&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 살펴볼 Guanaco(구아나코)입니다. Guanaco 모델 역시 Alpaca나 Vicuna처럼, LLaMA를 기반으로 '지시 따르기(instruction-following)' 데이터를 사용해 파인튜닝한 모델입니다. 하지만 &lt;b&gt;Guanaco의 가장 큰 특징이자 혁신적인 점은 'QLoRA(Quantized Low-Rank Adapter)'라는 기법을 이용해 아주 효율적인 파인튜닝을 했다는 점입니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;QLoRA란?&lt;/b&gt;&lt;br /&gt;LLM을 매우 적은 자원(리소스)으로 효율적으로 파인튜닝할 수 있게 만든 기법입니다. 핵심은 '4비트 양자화(quantization)'와 'LoRA(Low-Rank Adapter)'를 결합해, 메모리 사용량과 연산량을 크게 줄이면서도 성능 저하를 최소화하는 것입니다. 4비트 양자화는 원래 16비트나 32비트 부동소수점으로 저장된 LLM의 가중치를 4비트 정밀도로 압축하는 방식입니다. 이렇게 하면 모델 크기가 약 4분의 1 이하로 줄어들어 GPU 메모리 사용량이 대폭 감소합니다. 양자화된 가중치는 '동결(frozen)' 상태로 두어 학습 중 변경하지 않습니다. LoRA(Low-Rank Adapter)는 모델 전체를 학습시키지 않고, 저차원 행렬만 추가로 붙여서 그 부분만 학습하는 방식입니다. 그러면 학습해야 할 파라미터 개수가 대폭 줄어들어 매우 효율적입니다. QLoRA가 어떻게 작동하는지 간단히 설명해 드릴게요. QLoRA는 먼저 거대한 사전 훈련 모델의 가중치를 '4비트 양자화'라는 기술로 '동결시킵니다(frozen)'. 그런 다음, 아주 작은 크기의 LoRA라는 가중치 행렬만 집중적으로 학습시킵니다. 전체 모델을 다 훈련하는 게 아니라, 작은 부품만 갈아 끼우는 것처럼 효율적으로 튜닝하는 거죠.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 기술 덕분에, 이전에는 수많은 고성능 GPU가 필요했던&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;650억(65B) 파라미터짜리 거대 모델의 파인튜닝이, 단 하나의 48GB GPU에서도 가능해졌습니다. LLM 튜닝의 효율성을 획기적으로 높인 사건이었죠. 이렇게 효율적인데도 성능 또한 좋았습니다. 성능이 가장 좋은 Guanaco 모델은 이전에 출시된 대부분 모델의 성능을 능가했으며, 단 하나의 GPU로 24시간만 파인튜닝했음에도 ChatGPT 성능의 99.3% 수준에 도달했다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Koala&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 모델은 Koala(코알라)입니다. 이 모델 역시 LLaMA를 기반으로 한 '지시 따르기(instruction-following)' 모델입니다. &lt;b&gt;Koala의 가장 큰 특징은 훈련 데이터의 '품질'에 집중했다는 점입니다. Koala는 특히 'ChatGPT 같은 고품질 챗봇과 사용자가 나눈 실제 대화 데이터'를 집중적으로 학습했습니다. &lt;/b&gt;이는 '양보다 질' 전략이라고 할 수 있어요. 아주 많은 양의 데이터를 사용하는 대신, 품질이 좋은 '정제된' 대화 데이터를 학습시켜 모델의 성능을 끌어올리려는 시도였죠. 마치 평범한 책 100권을 읽는 것보다, 전문가가 쓴 최고의 명저 1권을 깊이 있게 읽는 것과 비슷합니다. 그 결과, Koala-13B 모델은 당시 최고 수준의 챗봇들과 경쟁할 만한 성능을 보여주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Mistral&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 모델은 Mistral-7B(미스트랄)입니다. 이 모델은 70억(7B) 개의 파라미터를 가진 모델로, 뛰어난 성능과 효율성을 위해 설계되었습니다. Mistral-7B는 성능이 가장 좋은 오픈 소스 13B 모델(즉, LLaMA-2-13B)보다 모든 벤치마크 평가에서 더 뛰어난 성능을 보여주었습니다. 심지어 수학, 코드 생성, 추론 능력에서는 LLaMA-34B(340억 파라미터) 모델보다도 우수했죠. 파라미터가 훨씬 더 적은데도 불구하고 말이죠. 이렇게 파라미터가 적은데 성능이 좋은 이유는 두 가지 핵심 기술 덕분입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;그룹-쿼리 어텐션(grouped-query attention)&lt;/b&gt;: 그룹-쿼리 어텐션은 기존의 멀티-헤드 어텐션(Multi-head attention)의 속도를 개선하면서도 성능 저하를 최소화하기 위해 고안된 어텐션 방식입니다. 멀티-헤드 어텐션에서는 모든 쿼리(query)가 자신만의 키(key)와 값(value) 쌍을 갖습니다. 그래서 정확하고 정교하게 정보를 처리할 수 있지요. 그런데 그만큼 모델의 추론 속도가 느립니다. 그룹-쿼리 어텐션은 여러 개의 쿼리 헤드를 그룹으로 묶고, 그룹별로 하나의 키와 값을 공유하게 만든 방식입니다. 그러므로 훨씬 효율적이죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;슬라이딩 윈도우 어텐션(sliding window attention)&lt;/b&gt;: 이 어텐션 기법 역시 더 적은 추론 비용으로 아주 긴 시퀀스(문장)도 효과적으로 처리할 수 있게 해주는 기술입니다. 트랜스포머 모델이 전체 데이터(즉, 긴 문장 전체)를 한꺼번에 보는 대신, 일정한 크기의 윈도우(window)를 정해 그 안의 데이터에만 집중하는 방식입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 가지 핵심 기술 덕분에 Mistral-7B는 '작지만 강한' 모델로 자리매김할 수 있었어요.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;미스트랄은 왜 동물 이름으로 작명하지 않았나?&lt;/b&gt;&lt;br /&gt;참고로 라마, 알파카, 비쿠냐 등은 모두 라마 계열의 동물 이름인데, 미스트랄은 그렇지 않습니다. 미스트랄은 프랑스 스타트업에서 만든 모델이라 라마 계통의 작명을 하지 않은 것입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;LLaMA 계열의 확장&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 LLaMA 계열을 확장한 모델은 더 많습니다. LLaMA 또는 LLaMA-2를 기반으로 만들어진 수많은 '지시 따르기(instruction-following)' 모델들이 등장한 것이죠. 예컨대,&amp;nbsp;&lt;b&gt;Code LLaMA, Gorilla, Giraffe, Vigogne, Tulu 65B, Long LLaMA, Stable Beluga2&lt;/b&gt; 등이 있습니다. 이 모델들은 단지 몇 가지 예시에 불과합니다. 이 모델들은 각각 특정 목적을 가지고 LLaMA를 개선한 것들이에요. &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;예를 들어 Code LLaMA는 이름처럼 '코드 생성'에 특화되었고, Gorilla는 '외부 도구(API) 사용' 능력에, Long LLaMA나 Giraffe는 '더 긴 문맥(context)을 이해'하는 능력에 집중하는 등 각자의 전문 분야를 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이것으로 LLM의 '민주화'를 이끈 LLaMA 계열에 대한 설명을 모두 마쳤습니다. LLaMA는 오픈 소스라는 강력한 무기를 바탕으로, LLaMA-2로 발전을 했고, Alpaca, Vicuna, Guanaco, Mistral 등 수많은 후속 모델들의 탄생을 이끌며 거대한 생태계를 구축했다는 점이 핵심이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) PaLM 계열&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 마지막 세 번째 계열은 구글(Google)이 개발한 PaLM(팜) 계열입니다. &lt;b&gt;PaLM&lt;/b&gt;은 '&lt;b&gt;Pa&lt;/b&gt;thways &lt;b&gt;L&lt;/b&gt;anguage &lt;b&gt;M&lt;/b&gt;odel'의 약자이죠. &lt;span&gt;2022년 4월에 처음 발표된 첫 PaLM 모델은 5400억(540) 개라는&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 엄청난 파라미터를 가진 트랜스포머 기반의 LLM입니다. &lt;/span&gt;&lt;span&gt;이 거대한 모델은 &lt;/span&gt;&lt;span&gt;7800억 개의 토큰으로 이루어진 대규모 고품질 텍스트로&lt;/span&gt;&lt;span&gt;&amp;nbsp;사전 훈련되었습니다. &lt;/span&gt;&lt;span&gt;PaLM의 훈련에는 구글의 AI 전용 시스템인 'Pathways(패스웨이즈)'와 &lt;/span&gt;&lt;span&gt;6144개의 TPU v4 칩&lt;/span&gt;&lt;span&gt;이 사용되었습니다. &lt;/span&gt;&lt;b&gt;PaLM은 '모델을 크게 만들수록 성능이 계속 좋아진다'는 '스케일링의 이점(benefits of scaling)'을 명확히 보여주었어요.&lt;/b&gt; 특히 PaLM-540B 모델은 여러 단계의 추론이 필요한 다단계 추론 작업(multi-step reasoning tasks)에서, 별도로 파인튜닝된 전문가 모델들을 능가하는 성능을 보였습니다. &lt;span&gt;심지어 아주 어려운 벤치마크인 BIG-bench에서는 인간과 동등한 수준의 성능을 기록하기도 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이제부터 PaLM의 후속 모델들에 대해 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;U-PaLM과 Flan-PaLM&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PaLM의 후속 모델로는 먼저 U-PaLM이 있습니다. &lt;b&gt;U-PaLM은 기존 PaLM 모델을 'UL2R'이라는 효율적인 방식으로 추가 훈련시킨 모델입니다.&lt;/b&gt; 이 방식을 통해 계산 비용을 2배 가까이 절약하며 성능을 높일 수 있었죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;UL2R란?&lt;/b&gt;&lt;br /&gt;UL2R은 'Unifying Language Learning by Retrofitting'의 약자로, 이미 훈련이 끝난 거대 모델을 아주 효율적으로 '보수 교육'시키는 방법이라고 할 수 있습니다. 이미 대학을 졸업한 똑똑한 인재(사전 훈련된 PaLM)를 회사에 뽑았다고 해보죠. 이 인재에게 처음부터 모든 것을 다시 가르치는 것은 비효율적일 겁니다. 대신, 우리 회사 실무에 꼭 필요한 몇 가지 새로운 방식으로 짧고 굵게 추가 교육을 시키는 거예요. UL2R은 바로 이 '실무 투입 전 최종 교육'과 같은 역할을 해서, 적은 비용으로도 모델의 성능을 한 단계 더 끌어올려 주는 기법입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 U-PaLM을 '지시 파인튜닝하여(instruction-finetuned)' 탄생한 모델이 바로 그 유명한 Flan-PaLM(플란-팜)입니다. &lt;b&gt;Flan-PaLM이 이전의 다른 지시 파인튜닝 모델들과 달랐던 점은 바로 '규모'입니다. 훨씬 더 많은 수의 작업(tasks), 더 큰 모델 크기(size), 그리고 '생각의 연쇄(chain-of-thought)' 데이터를 활용하여 파인튜닝을 한 것이죠.&lt;/b&gt; 그 결과, Flan-PaLM은 이전의 지시 따르기 모델들을 압도했습니다. 이를테면, 1,800개가 넘는 작업으로 지시 파인튜닝된 Flan-PaLM-540B 모델은 기존 PaLM-540B 모델보다 평균 9.4%나 더 높은 성능을 보여주었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;PaLM-2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 PaLM 가문의 다음 주자인 PaLM-2로 넘어가 보겠습니다. &lt;b&gt;PaLM-2는 이전 PaLM 모델과 비교하여 더 적은 계산 자원으로 더 높은 효율을 내도록 설계되었습니다.&lt;/b&gt; &lt;b&gt;특히 다국어(multilingual) 능력과 추론(reasoning) 능력이 크게 향상되었죠. &lt;/b&gt;PaLM-2는 여러 목표를 혼합(mixture of objectives)하는 방식으로 훈련되었습니다. 이는 마치 운동선수가 근력 운동, 유산소 운동, 유연성 운동을 모두 병행하여 전반적인 신체 능력을 끌어올리는 것과 같아요. 다양한 방식의 훈련을 통해 더 다재다능한 모델을 만들어낸 것입니다. 그 결과, PaLM-2는 다양한 모델 크기에서 영어, 다국어, 추론 과제 등 여러 작업(downstream tasks)에서 좋은 성능을 보였습니다. &lt;b&gt;동시에, 이전 PaLM보다 더 빠르게 추론(inference)을 할 수 있게 됐죠.&lt;/b&gt;&amp;nbsp;즉, 더 똑똑해졌을 뿐만 아니라 답변을 생각해내는 속도도 빨라진 셈입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Med-PaLM&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 살펴볼 PaLM 계열의 모델은 의료 분야에 특화된 Med-PaLM(메드팜)입니다. 이름에서 알 수 있듯이, &lt;b&gt;의료 분야의 질문에 고품질 답변을 제공하도록 설계된 '도메인 특화(domain-specific)' 모델이에요. &lt;/b&gt;Med-PaLM은 기존 PaLM을 파인튜닝해서 만든 모델입니다. 구체적으로 말하면, '지시 프롬프트 튜닝(instruction prompt tuning)'이라는 효율적인 방법으로 파인튜닝을 했죠. 단 몇 가지 예시만으로도 LLM을 새로운 전문 분야에 맞게 조정할 수 있는 기술이에요. Med-PaLM은 다양한 헬스케어 분야에서 고무적인 성과를 보여주었지만, 아직 인간 의사보다는 성능이 낮았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 등장한 Med-PaLM 2라는 모델이 등장했습니다. 의료 분야 데이터로 추가적인 파인튜닝을 하고, '앙상블 프롬프팅(ensemble prompting)'이라는 기술을 통해 성능을 더욱 개선한 모델이죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;앙상블 프롬프팅이란? &lt;/b&gt;&lt;br /&gt;앙상블 프롬프팅이란, 마치 여러 명의 전문가에게 자문을 구하듯, 모델에게 같은 질문을 여러 다른 방식으로 던져보고 그 답변들을 종합해서 가장 좋은 최종 결론을 내리는 방법이에요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 결과, Med-PaLM 2는 의사 국가고시 문제 등을 포함한 MedQA 데이터셋에서 최대 86.5%의 정확도를 기록했습니다. Med-PaLM보다 19% 이상 향상된 수치입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 구글의 PaLM 계열에 대한 설명을 마칩니다. PaLM은 '거대한 스케일링'의 힘을 증명했고, Flan-PaLM을 통해 대규모 '지시 튜닝'의 시대를 열었으며, Med-PaLM을 통해 '특정 분야 특화 모델'의 가능성을 보여주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 우리는 LLM 시대를 연 세 가지 대표 모델 계열, 즉 GPT, LLaMA, PaLM에 대해 자세히 알아보았습니다. 각 모델이 가진 뚜렷한 특징과 발전 과정을 이해하는 것이 LLM의 전체적인 흐름을 파악하는 데 중요합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pzsAg/btsPLKAp2I1/Lpa34kKyexUMqLmHPSWL11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pzsAg/btsPLKAp2I1/Lpa34kKyexUMqLmHPSWL11/img.png&quot; data-alt=&quot;대표적인 세 가지 LLM 계열 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pzsAg/btsPLKAp2I1/Lpa34kKyexUMqLmHPSWL11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpzsAg%2FbtsPLKAp2I1%2FLpa34kKyexUMqLmHPSWL11%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;1576&quot; height=&quot;529&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대표적인 세 가지 LLM 계열 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;C. 그 외 대표적인 LLM (Other Representative LLMs)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 소개한 세 가지 모델 계열에 속하지는 않지만 LLM 분야를 발전시킨 또 다른 중요한 모델들도 간략히 알아보겠습니다. 상당히 많은 모델이 있지만 여기서는 대표적인 8가지 모델에 대해서만 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;FLAN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 소개할 모델은 FLAN(플란)입니다. &lt;b&gt;FLAN은 '지시 튜닝(instruction tuning)'이라는 간단한 방법으로 언어 모델의 제로샷(zero-shot) 학습 능력을 크게 향상시킬 수 있다는 것을 보여준 중요한 모델입니다. &lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;핵심 아이디어&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;는, 1370억(137B) 개의 파라미터를 가진 사전 훈련 모델을, &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;60개가 넘는 다양한 NLP 데이터셋을 자연어 '지시문' 형태로 변환&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;하여 추가로 훈련한 것입니다. 예를 들어, 감성 분석 데이터가 있다면 &quot;다음 문장은 긍정적인가 부정적인가?&quot;와 같은 지시문 형태로 바꿔서 학습시킨 거죠. 그&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;결과,&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 이렇게 여러 종류의 지시를 학습한 FLAN은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;한 번도 본 적 없는 새로운 유형의 작업(unseen tasks)에 대해서도 별도의 예시 없이(zero-shot) 뛰어난 성능&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;을 보여주었습니다. 이는 모델이 '지시'라는 개념 자체를 일반화해 학습했기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;RETRO&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 살펴볼 모델은&lt;span&gt;&amp;nbsp;&lt;/span&gt;RETRO(레트로)입니다. 이 모델의 이름은 'Retrieval-Enhanced&lt;span&gt;&amp;nbsp;&lt;/span&gt;Transformer(검색-증강 트랜스포머)'의 약자로, 이름에 모든 핵심 아이디어가 담겨있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;기존의 언어 모델은 훈련 데이터에 저장된 '내부 기억'에만 의존해서 답변했어요. 이 때문에 최신 정보나 전문적인 지식에는 약했죠.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;RETRO는 이 문제를 해결하려고, 모델이 답변을 생성하는 도중에 실시간으로 외부 데이터베이스를 '검색(retrieval)'하여 관련된 정보를 찾아보고, 그 정보를 참고해서 답변을 생성하도록 만들어졌습니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;좀 더 구체적으로 말하면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RETRO가 답변을 생성하다가 막히거나 더 정확한 정보가 필요하면, 지금까지 쓴 답변 내용을 바탕으로 검색 쿼리를 만듭니다. 그리고 2조 개의 토큰이 저장된 거대한 외부 데이터베이스에서 가장 유사한 문서를 찾아오죠. 마지막으로, 원래 가지고 있던 지식과 방금 찾아온 외부 정보를 함께 고려해 다음 답변 내용을 이어서 생성합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이 '검색-증강' 방식 덕분에, RETRO는 GPT-3보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;25%나 더 적은 파라미터&lt;/span&gt;&lt;span&gt;를 가지고도 비슷한 성능을 낼 수 있었습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;이는 모델의 크기를 무작정 키우지 않고도, 외부 지식을 활용하여 성능을 크게 높일 수 있다는 것을 보여준 중요한 사례입니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;b&gt;GLaM&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음으로 살펴볼 모델은 GLaM(글램), 즉 '&lt;b&gt;G&lt;/b&gt;eneralist &lt;b&gt;La&lt;/b&gt;nguage &lt;b&gt;M&lt;/b&gt;odel(범용 언어 모델)'입니다. GLaM이 중요한 이유는, 거대한 모델을 효율적으로 훈련하고 사용하는 &lt;b&gt;'전문가 혼합(Mixture-of-Experts, MoE)'&lt;/b&gt; 아키텍처를 성공적으로 도입했기 때문입니다. &lt;/span&gt;MoE 구조를 '거대한 종합병원의 전문의 시스템'이라고 생각해보세요. 환자가 병원에 오면, 모든 의사가 다 진료하는 것이 아니라, 접수처(라우터)에서 환자의 증상을 보고 '아, 이 환자는 내과로 가야겠네요' 하고 가장 관련된 전문의(expert)에게만 보내주죠. MoE도 마찬가지입니다. &lt;b&gt;모델에 텍스트가 입력되면, '라우터(router)'라는 부분이 그 텍스트의 종류를 파악하고, 수많은 '전문가 네트워크' 중에서 가장 적합한 몇몇 전문가에게만 일을 시킵니다. 나머지 전문가들은 쉬고요.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식 덕분에, GLaM은 1.2조 개라는, GPT-3보다 약 7배나 많은 파라미터를 가졌음에도 불구하고, 훈련에 사용된 에너지는 GPT-3의 3분의 1에 불과했습니다. 답변을 생성하는 추론(inference) 단계에서도 필요한 계산량이 절반밖에 되지 않았죠. 즉, 평소에는 대부분의 전문가들이 쉬고 있다가, 필요할 때만 깨어나서 일하는 '간헐적으로 활성화되는(sparsely activated)' 방식 덕분에 엄청난 효율을 달성한 것입니다. 이러한 효율적인데도 GLaM은 29개의 NLP 과제에서 전반적으로 GPT-3보다 더 나은 제로샷, 원샷, 퓨샷 성능을 보여주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;LaMDA&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로 살펴볼 모델은 구글이 개발한 LaMDA(람다)입니다. LaMDA는 '&lt;b&gt;La&lt;/b&gt;nguage&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;M&lt;/b&gt;odels for&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;D&lt;/b&gt;ialogue&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;A&lt;/b&gt;pplications(대화 응용을 위한 언어 모델)'의 약자로, 이름에서 알 수 있듯이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;'대화'&lt;span&gt;&amp;nbsp;&lt;/span&gt;능력에 특화된 모델입니다.&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;이전 모델들이 주로 질문에 대한 '정답'을 찾는 데 집중했다면, LaMDA는 더 나아가&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;자연스럽고, 말이 되며, 흥미로운 대화&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;를 이어가는 것을 목표로 했습니다. &lt;/span&gt;LaMDA는 일반적인 웹 텍스트뿐만 아니라&lt;span&gt; &lt;/span&gt;방대한 양의&lt;span&gt;&amp;nbsp;&lt;/span&gt;공개 대화 데이터로 사전 훈련되었습니다. 특히&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; LaMDA는 두 가지 중요한 문제, 즉 안전성(safety) 있는 답변과 사실에 기반한(factual grounding) 답변에 집중했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Chinchilla&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 딥마인드(DeepMind)가 개발한 Chinchilla(친칠라)라는 모델을 알아보겠습니다. Chinchilla 모델이 중요한 이유는, LLM 훈련에 대한 기존의 통념을 뒤집었기 때문이에요. 기존의 통념은, 데이터 양과 관계없이 '모델은 무조건 크게' 만드는 것이 최고라고 것이었어요. GPT-3나 Gopher 같은 모델들이 그런 철학으로 만들어졌죠. 하지만 Chinchilla 연구팀은 400개가 넘는 다양한 크기의 모델을 훈련하는 대규모 실험을 통해, 이것이 비효율적이라는 사실을 발견했습니다. 최고의 '가성비'를 내기 위한 최적의 훈련법은, 모델 크기를 2배로 늘릴 때마다 훈련 데이터의 양도 똑같이 2배로 늘려야 한다는 것이었어요. 즉, &lt;b&gt;모델 크기와 데이터 양을 균형 있게 함께 키워야 한다는 새로운 '스케일링 법칙(scaling laws)'을 발견&lt;/b&gt;한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구팀은 이 가설을 증명하기 위해, 이전의 거대 모델인 Gopher와 동일한 컴퓨팅 예산을 사용하되, 새로운 법칙에 따라 모델 크기는 더 작게(700억 파라미터) 만들고 데이터 양은 더 늘려서 Chinchilla를 훈련시켰습니다. 그 결과, Chinchilla는 Gopher보다 훨씬 작은 모델인데도 불구하고 Gopher를 능가하는 성능을 보여주었죠. Chinchilla의 발견은 LLM 연구계에 충격을 주었고, &lt;b&gt;이후 LLM들은 무작정 크기만 키우는 대신, 모델과 데이터의 균형을 맞추는 방향으로 발전하게 되었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;BLOOM&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 모델은 BLOOM(블룸)입니다. 이 모델이 가지는 가장 큰 의의는 '어떻게 만들어졌는가'에 있습니다. &lt;b&gt;BLOOM은 특정 기업이 주도해서 만든 모델이 아닙니다. 전 세계 약 1,000명 정도의 학술 자원봉사자로 구성된 공개 협업 프로젝트인 빅사이언스(BigScience)가 개발한 모델이죠.&amp;nbsp;이름 그대로, 연구 커뮤니티의 협력을 통해 피어난 '꽃(Bloom)'과 같은 존재죠.&lt;/b&gt; BLOOM은&amp;nbsp;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;완전 개방형 모델입니다.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; LLaMA는 '비상업적' 오픈 소스인데 반해, BLOOM은 상업적으로도 자유롭게 사용할 수 있는 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;완전 개방형(open-access)&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 모델입니다. &lt;/span&gt;BLOOM은 46개의 자연어와 13개의 프로그래밍 언어로 구성된 ROOTS라는 거대한 다국어 말뭉치로 훈련되었습니다. 덕분에 처음부터 다양한 언어를 구사할 수 있는 능력을 갖추고 있죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clqUM0/btsPLXsQUJR/qoZgnrqbKzEdmnGqqHe7ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clqUM0/btsPLXsQUJR/qoZgnrqbKzEdmnGqqHe7ak/img.png&quot; data-alt=&quot;BLOOM 모델의 아키텍처 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clqUM0/btsPLXsQUJR/qoZgnrqbKzEdmnGqqHe7ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclqUM0%2FbtsPLXsQUJR%2FqoZgnrqbKzEdmnGqqHe7ak%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;1455&quot; height=&quot;716&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BLOOM 모델의 아키텍처 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;StarCoder&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 StarCoder(스타코더)를 알아보겠습니다. 이름에서 유추할 수 있듯이, &lt;b&gt;코드 생성(Code Generation)에 특화된 모델이에요.&lt;/b&gt;&amp;nbsp;155억(15.5B) 개의 파라미터를 가진 StarCoder는 몇 가지 뛰어난 특징이 있습니다. 8,000 토큰에 달하는 '긴 문맥'을 처리할 수 있고, 코드 중간의 빈 부분을 채워 넣는 '인필링(infilling)' 기능도 갖추고 있죠. 또한, '멀티-쿼리 어텐션(multi-query attention)'이라는 기술 덕분에 대규모 배치 처리 시에도 빠르게 추론할 수 있습니다. StarCoder의 훈련 데이터는 '더 스택(The Stack)'이라고 부르는, 허용 라이선스를 가진 방대한 깃허브(GitHub) 저장소에서 가져온 1조 개의 토큰입니다. 물론 개발자가 원할 경우 자신의 코드를 제외할 수 있는 '옵트아웃(opt-out)' 절차도 거쳤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StarCoder는 두 가지 버전이 있습니다. '더 스택' 데이터로 훈련한 기본 모델이 StarCoderBase입니다. 350억 개의 파이썬(Python) 토큰으로 StarCoderBase를 추가로 파인튜닝한 모델이 바로 우리가 아는 StarCoder입니다. StarCoderBase는 출시 당시, 여러 프로그래밍 언어를 지원하는 공개 코드 LLM들보다 뛰어난 성능을 보였으며, OpenAI의 코드 전문 모델(code-cushman-001)과 맞먹거나 그 이상의 성능을 기록했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Gemini&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 살펴볼 모델은 구글이 개발한 Gemini(제미나이)입니다. &lt;span&gt;Gemini는 이미지, 오디오, 비디오, 텍스트 등 다양한 종류의 데이터를 이해하는 데 뛰어난 능력을 보여주는 최신 멀티모달(multimodal) 모델 계열입니다. &lt;/span&gt;&lt;span&gt;Gemini는 세 가지 버전으로 구성됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Ultra (울트라): 매우 복잡한 작업을 위한 최고 성능 버전입니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Pro (프로)&lt;/span&gt;&lt;span&gt;: 성능과 확장성 사이의 균형을 맞춘 버전입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Nano (나노)&lt;/span&gt;&lt;span&gt;: 스마트폰 같은 기기 내에서 직접 작동하도록 만든 가장 작고 효율적인 버전입니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Gemini의 아키텍처는 트랜스포머 디코더를 기반으로 하며, 효율적인 어텐션 메커니즘을 사용하여 32,000 토큰에 달하는 긴 문맥을 지원하도록 훈련되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 3대 LLM 계열(GPT, LLaMA, PaLM)과 기타 중요한 LLM들에 대한 설명을 모두 마쳤습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1579&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckGwdi/btsPNLES006/nrxHbZQKKklAYVVZvnjaFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckGwdi/btsPNLES006/nrxHbZQKKklAYVVZvnjaFk/img.png&quot; data-alt=&quot;대표적인 LLM 프레임워크의 타임라인 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckGwdi/btsPNLES006/nrxHbZQKKklAYVVZvnjaFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckGwdi%2FbtsPNLES006%2FnrxHbZQKKklAYVVZvnjaFk%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;1579&quot; height=&quot;766&quot; data-origin-width=&quot;1579&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대표적인 LLM 프레임워크의 타임라인 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2장에서는 LLM의 역사와 종류, 그리고 각 모델이 어떤 특징과 철학을 가지고 발전해왔는지 자세히 살펴보았습니다. 이제 다음 단계로, 이 거대한 LLM들을 실제로 '어떻게 만드는지' 그 구체적인 과정을 알아보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;III.&amp;nbsp;LLM은&amp;nbsp;어떻게&amp;nbsp;만들어지는가?&amp;nbsp;(HOW&amp;nbsp;LLMs&amp;nbsp;ARE&amp;nbsp;BUILT)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 장에서는 LLM을 만드는 전체 과정을 단계별로 설명합니다. LLM 훈련 과정을 요리에 빗대어 간략히 먼저 개괄해보면 다음과 같아요.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;주요 LLM 아키텍처 (Dominant LLM Architectures)&lt;/b&gt;: 가장 먼저, 어떤 요리를 만들지에 따라 &lt;b&gt;'주방 도구(인코더, 디코더, 인코더-디코더 등)'&lt;/b&gt;를 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 정제 (Data Cleaning)&lt;/b&gt;: 다음으로, 신선한 재료를 골라 깨끗하게 &lt;b&gt;'손질'&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;토큰화 (Tokenizations)&lt;/b&gt;: 손질이 끝난 재료를 요리하기 좋게 칼로 &lt;b&gt;'잘게 다지는'&lt;/b&gt; 과정입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;위치 인코딩 (Positional Encoding)&lt;/b&gt;: 레시피의 순서가 중요하듯, 다진 재료에 &lt;b&gt;'요리 순서 번호표'&lt;/b&gt;를 붙여줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모델 사전 훈련 (Model Pre-training)&lt;/b&gt;: 모든 재료를 넣고 오랜 시간 끓여 맛의 기본이 되는 &lt;b&gt;'기본 육수'&lt;/b&gt;를 우려냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파인튜닝&amp;nbsp;및 지시 튜닝 (Fine-tuning and Instruction Tuning)&lt;/b&gt;: 기본 육수에 특제 소스를 넣어 &lt;b&gt;'원하는 맛'&lt;/b&gt;을 냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정렬 (Alignment)&lt;/b&gt;: 만든 요리가 사람들의 입맛에 딱 맞도록 소금과 후추로 마지막 &lt;b&gt;'간을 맞추는'&lt;/b&gt; 과정입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디코딩 전략 (Decoding Strategies)&lt;/b&gt;: 완성된 요리를 손님에게 &lt;b&gt;'어떻게 내놓을지(서빙할지)'&lt;/b&gt; 결정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용 효율적 훈련/추론/적응/압축 (Cost-Effective Training/Inference/Adaptation/Compression)&lt;/b&gt;: 마지막으로, 이 모든 요리 과정을 어떻게 하면 &lt;b&gt;'더 빠르고 효율적으로 할 수 있을지 개선'&lt;/b&gt;해봅니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;8d8557a93a3099d3&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;model-response-message-contentr_8d8557a93a3099d3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 단계인 '주요 LLM 아키텍처'부터 시작해보죠!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A.&amp;nbsp;주요&amp;nbsp;LLM&amp;nbsp;아키텍처&amp;nbsp;(Dominant&amp;nbsp;LLM&amp;nbsp;Architectures)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 널리 사용하는 LLM의 구조는 바로 2장에서 이미 살펴본&amp;nbsp;Encoder-only, Decoder-only, 그리고 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Encoder-Decoder&lt;/span&gt;입니다. 그리고 이 대부분의 아키텍처는 트랜스포머(Transformer)를 기본 '설계 블록(building block)'으로 사용하고 있습니다. 따라서 본격적으로 세 가지 유형을 살펴보기 전에, 그 근간이 되는 트랜스포머 아키텍처 자체를 먼저 복습하고 넘어가겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 트랜스포머 (Transformer)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2017년 Vaswani(바스와니) 등의 연구자들이 발표한 트랜스포머 프레임워크는 LLM의 역사를 바꾼 혁신적인 설계였습니다. 처음부터 트랜스포머는 GPU를 통해 효과적으로 병렬 컴퓨팅하도록 설계되었죠. 트랜스포머의 핵심은 바로 '어텐션 메커니즘(attention mechanism)'입니다. 어텐션 메커니즘 덕분에 기존의 순환(recurrence) 방식이나 합성곱(convolution) 방식보다 훨씬 더 효과적으로, 문장 내의 장기 문맥 정보(long-term contextual information)를 포착할 수 있게 되었어요. 문장이 길어져도 핵심 의미를 놓치지 않게 되었죠. 아래 그림은 이 트랜스포머의 전체적인 구조를 나타냅니다. 이번 섹션에서는 트랜스포머의 주요 성분에 대해 알아보고, 트랜스포머를 변형한 몇 가지 구조에 대해서도 간단히 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCnVzm/btsPNEsssqR/f4Xh6XmbgOXot2ncGPnpTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCnVzm/btsPNEsssqR/f4Xh6XmbgOXot2ncGPnpTk/img.png&quot; data-alt=&quot;트랜스포머 구조 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCnVzm/btsPNEsssqR/f4Xh6XmbgOXot2ncGPnpTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCnVzm%2FbtsPNEsssqR%2Ff4Xh6XmbgOXot2ncGPnpTk%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;500&quot; height=&quot;700&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;트랜스포머 구조 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 기계 번역을 위해 제안된 트랜스포머 아키텍처는 인코더와 디코더, 두 부분으로 구성됩니다. 먼저 인코더는 똑같이 생긴 6개의 '트랜스포머 레이어'가 겹겹이 쌓인 구조입니다. 그리고 각 레이어는 두 개의 '하위 레이어(sub-layers)'로 이루어져 있죠. 첫 번째 하위 레이어는 '멀티-헤드 셀프-어텐션(multi-head self-attention)' 층이고, 두 번째 하위 레이어는 간단한 '순방향 신경망(feed-forward network)'입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;멀티-헤드 어텐션이란? &lt;/b&gt;&lt;br /&gt;어텐션을 한 번만 하는 게 아니라, 여러 개의 '헤드(head)'가 각기 다른 관점에서 문장을 동시에 살펴보는 방식이에요. 이를 통해 문장의 다양한 의미적 관계를 훨씬 더 풍부하게 포착할 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코더 역시 똑같이 생긴 6개의 레이어가 쌓인 구조입니다. 하지만 인코더와는 한 가지 다른 점이 있어요. 디코더의 각 레이어는 인코더가 가진 두 개의 하위 레이어에 더해, 또 다른 하위 레이어를 가지고 있습니다. 이 레이어는 인코더가 압축해서 넘겨준 정보에 대해 '멀티-헤드 어텐션'을 수행하는 역할을 합니다. 즉, '입력 문장의 의미를 다시 한번 잘 살펴보고, 그 의미에 맞게 다음 단어를 생성해라'라고 알려주는 아주 중요한 부분이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어텐션 함수는 쿼리(Query), 키(Key), 값(Value)이라는 세 가지 요소에 따라 작동합니다. 도서관에서 책을 찾는 과정에 비유하면 이해하기 쉬워요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;쿼리(Query)&lt;/b&gt;: 쿼리는 '내가 지금 찾고 싶은 정보'입니다. 예를 들어, '인공지능'이라는 주제의 책을 찾고 싶다면, '인공지능'이 바로 쿼리가 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키(Key)&lt;/b&gt;: 키는 도서관에 있는 모든 책들의 '주제'나 '카테고리'를 일컫습니다. '인공지능', '역사', '요리' 등 각 책이 어떤 내용을 담고 있는지 나타내는 레이블 같은 거죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;값(Value)&lt;/b&gt;: 값은 그 책의 '실제 내용'입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어텐션은 먼저 내가 가진 쿼리('인공지능')와 모든 책의 키('주제')를 비교해서 유사도 점수를 계산합니다. '인공지능' 쿼리는 '인공지능' 키와의 유사도 점수가 가장 높겠죠. 이 점수가 바로 '어텐션 가중치(attention weight)'가 됩니다. 마지막으로, 이 가중치를 각 책의 값('실제 내용')에 곱해서 모두 더합니다. 그러면 '인공지능'이라는 쿼리와 가장 관련성이 높은 책의 내용이 가장 큰 비중으로 반영된 최종 결과(output)를 얻게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 우리가 앞서 배운 '멀티-헤드 어텐션'은 이 '도서관에서 책 찾기'를 한 명이 하는 게 아니라, 여러 명(head)이 각자 다른 기준(예: 한 명은 제목, 다른 한 명은 저자)으로 동시에 책을 찾아본 뒤, 그 결과를 종합하는 방식이라고 볼 수 있습니다. 마지막으로, 위치 인코딩(positional encoding)은 단어의 상대적 또는 절대적인 위치 정보를 모델에 알려주는 역할을 합니다. 단어의 의미뿐만 아니라 '순서'도 중요하다는 것을 알려주는 장치죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 트랜스포머의 기본 원리에 대한 설명을 마쳤습니다. 이제 이 트랜스포머라는 강력한 구조를 가지고 만든 세 가지 종류의 모델, 즉 Encoder-only, Decoder-only, Decoder-Encoder 모델에 대해 다시 한번 살펴보겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2)&amp;nbsp;Encoder-Only&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Encoder-only 계열의 모델들은 이름처럼 인코더만 사용합니다. 가장 큰 특징은, 어텐션 레이어가 입력된 문장의 모든 단어를 '한 번에' 살펴볼 수 있다는 점입니다. 마치 독수리가 하늘에서 숲 전체를 조망하듯, 문장의 전체적인 문맥을 파악하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Encoder-only 모델은 주로 '손상된 문장을 복원'하는 방식으로 사전 훈련을 합니다. 예를 들어, 문장의 일부 단어 몇 개를 무작위로 가려놓고(masking), 모델이 원래 문장을 복원하도록 하는 방식이죠. 이 과정을 통해 모델은 문맥을 깊이 있게 이해하는 능력을 기릅니다. 따라서 &lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Encoder-only&lt;span&gt; &lt;/span&gt;&lt;/span&gt;모델은 문장 전체에 대한 이해가 필요한 작업에 적합합니다.&lt;/b&gt; 가령, 문장의 주제를 맞히는 문장 분류(sentence classification), 문장에서 인물이나 장소 이름을 찾아내는 개체명 인식(named entity recognition), 그리고 주어진 지문에서 정답을 그대로 찾아내는 추출형 질의응답(extractive question answering)과 같은 작업 등에 말이죠. 이 Encoder-only 구조의 가장 대표적인 모델이 바로 우리가 앞서 살펴본 BERT입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3)&amp;nbsp;Decoder-Only&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 '디코더'만 사용하는 Decoder-only 계열에 대해 알아보죠. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Decoder-only&lt;span&gt; &lt;/span&gt;&lt;/span&gt;모델의 어텐션 레이어는 각 단계마다 현재 단어 이전에 위치한 단어들에만 접근할 수 있습니다. 즉, 미래의 내용은 볼 수 없고 오직 과거의 내용만 볼 수 있죠. 이런 특징 때문에&amp;nbsp; Decoder-only 모델을 '자기회귀(auto-regressive)' 모델이라고도 부릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Decoder-only 모델은 주로 다음에 올 단어(또는 토큰)를 예측하는 방식으로 사전 훈련합니다. 마치 이야기꾼이 앞에서 했던 말을 바탕으로 다음 이야기를 계속 이어나가는 것과 같죠. 이런 특징 때문에 &lt;b&gt;Decoder-only 모델은 텍스트 생성(text generation)과 관련한 작업에 가장 적합합니다.&lt;/b&gt; Decoder-only 구조의 가장 대표적인 모델이 GPT 계열입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4)&amp;nbsp;Encoder-Decoder&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더-디코더 모델은 '이해 전문가'인 인코더와 '생성 전문가'인 디코더를 통합한 모델입니다. 그래서 '시퀀스-투-시퀀스(sequence-to-sequence)' 모델이라고도 부르죠. &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;먼저 인코더의 어텐션 레이어는 입력된 문장의 모든 단어를 한 번에 살펴봐서 전체적인 문맥과 의미를 파악합니다. 반면, 디코더의 어텐션 레이어는 생성하려는 문장에서 현재 단어 이전에 위치한 단어들만 볼 수 있죠. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;인코더-디코더 모델을 사전 훈련할 때는&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Encoder-only나 &lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Decoder-only 보다&lt;/span&gt; 좀 더 복잡한 방식을 사용하기도 합니다. 예컨대, 텍스트의 일부분을 무작위로 [MASK] 토큰으로 대체하고, 모델이 그 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;[MASK]에 원래 어떤 텍스트가 있었는지를&lt;/span&gt; 예측하도록 하는 방식이죠.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;b&gt; 인코더-디코더 모델은 주어진 입력에 맞춰 새로운 문장을 생성하는 작업을 잘합니다.&lt;/b&gt; 대표적으로 요약(summarization), 번역(translation), 생성형 질의응답(generative question answering)과 같은 작업 등을 말이죠.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;여기서 잠깐! 인코더-디코더 모델의 사전 훈련 방식이 Encoder-only 모델의 사전 훈련 방식과 비슷하다고 생각되겠지만 조금 다릅니다. Encoder-only에서는 문장 중간에 있는 단어 몇 개를 마스킹해놓고, 그 단어 하나하나를 맞히는 '단답형 주관식' 문제를 풉니다. 이해 능력을 기르는 데 집중하는 거에요. 그에 반해 인코더-디코더 모델의 사전 훈련 방식에서는 연속된 단어 덩어리(즉, 문장 자체)를 마스킹한 뒤, 문맥에 맞게 그 문장을 생성해내는 '서술형 논술' 문제를 풉니다. 즉, 입력을 이해하는 능력과 출력을 생성하는 능력을 동시에 훈련하는 거죠.&amp;nbsp;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B.&amp;nbsp;데이터&amp;nbsp;정제&amp;nbsp;(Data&amp;nbsp;Cleaning)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 그럼 3장 'LLM 훈련 방법'의 두 번째 단계, '데이터 정제(Data Cleaning)'에 대해 알아보겠습니다. 좋은 요리는 좋은 재료에서 시작하듯, 훌륭한 LLM은 깨끗하고 품질 좋은 데이터에서 시작합니다. LLM을 훈련시키는 데 있어, 데이터의 품질은 모델의 최종 성능에 결정적인 영향을 미칩니다. 필터링(filtering)이나 중복 제거(deduplication)와 같은 데이터 정제 기술이 모델 성능에 아주 큰 영향을 미친다는 점이 밝혀졌죠. 그 대표적인 예시로 Falcon-40B 모델이 있습니다. Falcon 연구팀은 제대로 필터링하고 중복을 제거한 웹 데이터만으로도 아주 강력한 모델을 만들 수 있다는 사실을 보여주었습니다. 심지어 당시 최고 수준의 데이터셋으로 여겨졌던 'The Pile'로 훈련한 모델보다도 더 뛰어난 성능을 보였죠. Falcon 연구팀은 '커먼 크롤(Common Crawl)'이라는 거대한 웹 데이터를 바탕으로 정제를 꽤나 했음에도, 5조 개의 토큰을 얻을 수 있었습니다. 그리고 이 과정에서 얻은 REFINEDWEB 데이터셋의 일부(6000억 토큰)와, 그 데이터로 훈련시킨 모델까지 공개했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VYYD7/btsPK1CKMA9/JwO9ZgiILe7MJmwXhz3y4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VYYD7/btsPK1CKMA9/JwO9ZgiILe7MJmwXhz3y4k/img.png&quot; data-alt=&quot;커먼 크롤(Common Crawl) 데이터셋을 정제하는 단게별 과정 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VYYD7/btsPK1CKMA9/JwO9ZgiILe7MJmwXhz3y4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVYYD7%2FbtsPK1CKMA9%2FJwO9ZgiILe7MJmwXhz3y4k%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;1021&quot; height=&quot;586&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;커먼 크롤(Common Crawl) 데이터셋을 정제하는 단게별 과정 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1)&amp;nbsp;데이터&amp;nbsp;필터링&amp;nbsp;(Data&amp;nbsp;Filtering)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 필터링의 목적은 훈련 데이터의 품질을 좋게 만들어, 이를 바탕으로 훈련한 LLM의 성능을 높이는 것이에요. 데이터 필터링의 몇 가지 기법을 소개하겠습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;노이즈 제거 (Removing Noise)&lt;/b&gt;: 모델의 일반화 능력을 해칠 수 있는 노이즈 데이터를 제거하는 작업을 의미합니다. 예를 들어, 훈련 데이터에서 거짓 정보가 포함되어 있다면 이를 제거해야겠죠. 그래야 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;모델이 잘못된 정보를 생성할 가능성이 줄어듭니다.&lt;/span&gt; 노이즈 제거 기법에는 크게 분류 기반 방식과 휴리스틱 기반 방식이 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상치 처리 (Handling Outliers)&lt;/b&gt;: 데이터에 포함된 이상치나 비정상적인 값을 식별하고 처리하는 작업입니다. 그래야 모델이 불균형적이지 않게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;불균형 해소 (Addressing Imbalances)&lt;/b&gt;: 데이터셋에 포함된 클래스나 카테고리의 분포를 균형 있게 맞추는 작업입니다. 편향을 피하고 공정한 출력을 내는 데 필요한 작업이죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;텍스트 전처리 (Text Preprocessing)&lt;/b&gt;: 불용어(stop words), 구두점(punctuation) 등 모델 학습에 크게 기여하지 않는 요소를 제거하는 작업입니다. 텍스트 데이터를 정제하고 표준화하는 작업이에요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모호성 처리 (Dealing with Ambiguities)&lt;/b&gt;: 훈련 중 모델을 혼란스럽게 할 수 있는 모호하거나 모순된 데이터를 처리하는 작업입니다. 이를 통해 모델이 더 명확하고 신뢰할 수 있는 답변을 제공할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2)&amp;nbsp;중복&amp;nbsp;제거&amp;nbsp;(Deduplication)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복 제거는 데이터셋에서 동일한 데이터가 반복적으로 나타나는 것을 제거하는 과정입니다. 중복 제거가 왜 중요할까요?&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 만약 똑같은 데이터가 수차례 중복되어 있다면, 모델은 그 특정 데이터만 과도하게 학습해 과적합(overfitting)될 수 있습니다. 이렇게 되면, 모델은 학습한 내용과 조금이라도 다른 새로운 데이터를 접했을 때 제대로 성능을 내지 못하게 되죠. 즉, 모델의 일반화(generalization) 성능이 떨어지게 됩니다. 그러므로 일반화 성능을 높이려면 중복 제거가 꼭 필요해요. 강건한(robust) LLM을 만드는 데 필요하다는 말이죠. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;특히 대규모 데이터셋을 다룰 때 중복 제거가 중요합니다. 문서 전체를 비교하거나, n-gram(단어 묶음)의 중복 비율을 계산하는 등 다양한 방법으로 중복된 샘플을 찾아 제거합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 LLM을 만들기 위한 재료를 깨끗하게 손질하는 작업, 즉 '데이터 정제'에 대한 설명을 마칩니다. 이제 다음 단계로 넘어가 보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;C.&amp;nbsp;토큰화&amp;nbsp;(Tokenizations)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 단계는 깨끗하게 손질된 재료를 요리하기 좋게 잘게 다지는 과정, 바로 토큰화입니다. &lt;b&gt;토큰화는 문장과 같은 긴 텍스트를 모델이 처리할 수 있는 작은 단위, 즉 '토큰(token)'으로 나누는 과정입니다. &lt;/b&gt;가장 간단한 토큰화는 띄어쓰기(white space)를 기준으로 단어를 나누는 것입니다. 그런데 이 방식을 적용하면 '어휘 외 단어(Out-of-Vocabulary, OOV)'라는 문제가 발생합니다. 즉, 훈련 때 보지 못한 새로운 단어가 나오면 처리하지 못하는 거죠. 가령, 토크나이저가 '강아지'라는 단어만 알고 있는데 '댕댕이'라는 신조어가 등장하면, '이게 뭐지?' 하고 당황하게 되는 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 OOV 문제를 해결하고 사전의 범위를 늘리기 위해, LLM에 사용되는 인기 있는 토크나이저들은 '서브워드(sub-word)'를 활용합니다. '서브워드'는 단어를 더 작은 의미 단위로 쪼갠 것입니다. 이 서브워드들을 조합하면, 훈련 데이터에서 본 적 없는 새로운 단어도 표현할 수 있게 됩니다. 주로 활용하는 서브워드 토큰화 방식은 다음과 같습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1)&amp;nbsp;Byte-Pair&amp;nbsp;Encoding&amp;nbsp;(BPE)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BPE는 원래 데이터 압축을 위해 만들어진 알고리즘입니다. &lt;b&gt;텍스트에 가장 자주 함께 등장하는 글자 쌍을 찾아서 하나의 새로운 토큰으로 병합해 나가는 방식이죠.&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;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;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 글로만 보면 이해가 되지 않으니 low, lower, newest, we라는 텍스트를 바탕으로 BPE를 수행해보겠습니다. 먼저 모든 글자를 하나씩 쪼갭니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;초기 상태&lt;br /&gt;l, o, w&lt;br /&gt;l, o, w, e, r&lt;br /&gt;n, e, w, e, s, t&lt;br /&gt;w, e&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 가장 자주 등장하는 쌍을 찾습니다. w, e 쌍이 3번 등장하네요. w, e를 we로 병합합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1차 병합 (w, e &amp;rarr; we)&lt;br /&gt;l, o, w&lt;br /&gt;l, o, we, r&lt;br /&gt;n, e, we, s, t&lt;br /&gt;we&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음으로 자주 등장하는 쌍은 l, o 쌍입니다. 2번 등장하네요.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2차 병합 (l, o &amp;rarr; lo)&lt;br /&gt;lo, w&lt;br /&gt;lo, we, r&lt;br /&gt;n, e, we, s, t&lt;br /&gt;we&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음으로 자주 등장하는 쌍은 모두 1번씩입니다. 이럴 때는 정해진 규칙에 따라 병합하면 됩니다. 여기서는 lo, w 쌍을 low로 병합해보겠습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;3차 병합 (lo, w &amp;rarr; low)&lt;br /&gt;low&lt;br /&gt;lo, we, r&lt;br /&gt;n, e, we, s, t&lt;br /&gt;we&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 반복하는 과정을 거칩니다. BPE의 장점은, 자주 쓰이는 단어는 통째로 유지하면서도 처음 보는 단어는 작은 서브워드의 조합으로 표현할 수 있어 어휘 크기를 적절하게 유지할 수 있다는 점입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2)&amp;nbsp;WordPiece&amp;nbsp;Encoding&amp;nbsp;(워드피스&amp;nbsp;인코딩)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 서브워드 토큰화 방식은 WordPiece Encoding(워드피스 인코딩)입니다. 이 알고리즘은 BERT나 ELECTRA 같은 유명한 모델들에서 주로 사용되었습니다. WordPiece는 훈련을 시작할 때, 훈련 데이터에 있는 모든 알파벳을 어휘 목록에 포함시키는 것부터 시작합니다. 이렇게 하는 이유는, 토크나이저가 처리하지 못하는 'UNK(unknown, 알 수 없음)' 토큰이 발생하는 상황을 막기 위해서입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BPE와 마찬가지로, WordPiece도 자주 등장하는 단위를 합쳐서 새로운 토큰을 만듭니다. 하지만 기준이 약간 달라요. &lt;b&gt;BPE가 '가장 자주 나오는 글자 쌍'을 합쳤다면, WordPiece는 '기존 토큰들을 합쳤을 때, 전체 훈련 데이터의 가능도(likelihood)가 가장 크게 증가하는 조합'을 찾아 합칩니다.&lt;/b&gt; 비유적으로 표현하면,&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; BPE는 단순히 '가장 많이 팔린 햄버거와 감자튀김 세트'를 메뉴에 추가하는 방식이라면, WordPiece는 '햄버거와 감자튀김을 세트로 묶었을 때, 우리 가게 전체 매출이 가장 크게 오르는가?'를 계산해서 메뉴를 추가하는 방식이라고 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;3)&amp;nbsp;SentencePiece&amp;nbsp;Encoding&amp;nbsp;(센텐스피스&amp;nbsp;인코딩)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 토큰화 방식은 SentencePiece Encoding(센텐스피스 인코딩)입니다. SentencePiece Encoding 방식의 가장 큰 특징은 이전의 두 방식(BPE, WordPiece)이 가지고 있던 한 가지 가정을 버렸다는 점입니다. &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;BPE, WordPiece 토큰화 방식은 단순히 띄어쓰기(공백) 기준 토큰화에 비해서는 더 효과적인 방식이지만, BPE, WordPiece 토큰화 방식 역시 문장에 띄어쓰기가 있다고 가정합니다. 하지만 띄어쓰기가 없거나 다른 규칙을 따르는 언어도 있고, 웹 데이터에는 불필요한 공백이나 노이즈가 많죠. SentencePiece는 이러한 문제를 해결한 토큰화 방식입니다. 공백이나 토큰 사전에 의존하지 않고 순수하게 문자열 전체를 하나의 시퀀스로 처리함으로써 말이죠. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;덕분에 SentencePiece는 언어에 구애받지 않고, 다양한 형태의 텍스트에 훨씬 더 강건하게(robust) 대처할 수 있게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;D.&amp;nbsp;위치&amp;nbsp;인코딩&amp;nbsp;(Positional&amp;nbsp;Encoding)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;트랜스포머의 어텐션 메커니즘은 단어들의 관계를 파악하는 데는 뛰어나지만, 한 가지 치명적인 약점이 있습니다. 바로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;'단어의 순서'를 인식하지 못한다는 점이에요. '철수가 영희를 좋아한다'와 '영희가 철수를 좋아한다'는 단어는 같지만 순서가 달라 의미가 완전히 다르죠. 위치 인코딩은 바로 이 문제를 해결하기 위해 등장했습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1)&amp;nbsp;절대&amp;nbsp;위치&amp;nbsp;임베딩&amp;nbsp;(Absolute&amp;nbsp;Positional&amp;nbsp;Embeddings,&amp;nbsp;APE)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 기본적인 방식은 절대 위치 임베딩(APE)입니다. 이는 2017년 최초의 트랜스포머 논문에서 사용된 방식으로, &lt;b&gt;문장의 각 자리에 고유한 번호(위치 벡터)를 부여하고, 이 번호를 단어의 임베딩(의미 벡터)에 그냥 더해주는 아주 간단한 방식입니다.&lt;/b&gt; 예를 들어, 첫 번째 자리에는 1번 번호표, 두 번째 자리에는 2번 번호표를 붙여주는 거죠. 초기 트랜스포머에서는 sine 함수, cosine 함수를 이용해 절대 위치 임베딩을 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이 방식에는 단점이 있습니다. 정해진 길이(예: 512개 단어)까지만 번호표가 준비되어 있어, 훈련 때 본 것보다 더 긴 문장이 들어오면 처리하기 어렵다는 점이죠. 게다가 단어들 사이의 '상대적인 거리'를 제대로 반영하지 못했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brz0Gw/btsPMTwIK9H/nFjFV1uVX3xpm13xJlo1ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brz0Gw/btsPMTwIK9H/nFjFV1uVX3xpm13xJlo1ik/img.png&quot; data-alt=&quot;절대 위치 임베딩 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brz0Gw/btsPMTwIK9H/nFjFV1uVX3xpm13xJlo1ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrz0Gw%2FbtsPMTwIK9H%2FnFjFV1uVX3xpm13xJlo1ik%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;250&quot; height=&quot;341&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;절대 위치 임베딩 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;2)&amp;nbsp;상대&amp;nbsp;위치&amp;nbsp;임베딩&amp;nbsp;(Relative&amp;nbsp;Positional&amp;nbsp;Embeddings,&amp;nbsp;RPE)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;절대 위치 임베딩의 한계로 인해 연구자들은 더 나은 위치 임베딩 방법을 개발했습니다. 바로 상대 위치 임베딩(RPE)이죠. &lt;b&gt;상대 위치 임베딩은 문장에서 각 단어에 고정된 주소를 부여하는 대신 단어들 사이의 상대적인 관계(예: 바로 옆 단어, 3칸 떨어진 단어)에 집중합니다. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;셀프-어텐션 메커니즘을 확장하여 두 단어 사이의 거리를 직접적으로 고려하는 방식으로 동작하죠. 예를 들어, '나는 학교에 간다'라는 문장에서 '나'와 '학교' 사이의 거리를 계산하여 그 관계를 모델에 알려주는 거에요.&lt;/span&gt;&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;&lt;b&gt;키(Key) 행렬에 '위치 정보' 추가&lt;/b&gt;: 어텐션 계산 시, 단어의 의미뿐만 아니라 두 단어 사이의 상대적인 거리 정보까지 함께 고려하여 키(Key)를 만듭니다. '쿼리'와 '키'의 유사도를 비교할 때, 단순히 단어의 '의미'만 비교하는 게 아니라, '두 단어가 얼마나 떨어져 있는지'에 대한 '거리 점수'를 추가로 더해줍니다. 그래서 가까운 단어일수록 더 높은 점수를 받게 되죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;값(Value) 행렬에 '위치 정보' 추가&lt;/b&gt;: 최종 결과물을 만들 때도 이 상대적인 거리 정보를 반영합니다. 즉, 최종 결과물을 만들 때도 단순히 '의미'만 종합하는 게 아니라, '거리 점수'를 한 번 더 반영해서 가까운 단어의 정보에 더 가중치를 줍니다.&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;또한, 상대 위치 임베딩에서는 '클리핑 거리(clipping distance)'라는 개념을 사용합니다. 특정 거리까지만 상대적인 위치를 세밀하게 고려하고, 그보다 더 멀리 떨어진 단어들은 그냥 '멀리 있다'고만 인식하는 방식입니다. 이 덕분에, 모델이 훈련 때 보지 못했던 더 긴 문장에 대해서도 합리적으로 예측하고 일반화할 수 있게 됩니다.&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;1021&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl4Id1/btsPNdhoj9f/5t7SKRfR3Ln2gKgCKnufD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl4Id1/btsPNdhoj9f/5t7SKRfR3Ln2gKgCKnufD1/img.png&quot; data-alt=&quot;상대 위치 임베딩 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl4Id1/btsPNdhoj9f/5t7SKRfR3Ln2gKgCKnufD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl4Id1%2FbtsPNdhoj9f%2F5t7SKRfR3Ln2gKgCKnufD1%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;1021&quot; height=&quot;674&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상대 위치 임베딩 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;3)&amp;nbsp;회전식&amp;nbsp;위치&amp;nbsp;임베딩&amp;nbsp;(Rotary&amp;nbsp;Positional&amp;nbsp;Embeddings,&amp;nbsp;RoPE)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 회전식 위치 임베딩, 즉 RoPE(로프)입니다. 이 방식은 이전 접근법들의 문제점을 해결하기 위해 등장했습니다. &lt;b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;RoPE는 회전 행렬(rotation matrix)을 사용해 단어의 절대적인 위치를 인코딩하면서도, 동시에 셀프-어텐션 계산 시에는 단어들 간의 상대적인 위치 정보를 반영합니다.&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 마치 지구 위에서 서울 위치를 나타낼 때, '북위 37도, 동경 127도'라는 절대적인 좌표(위도, 경도)를 사용하면서도, '서울은 도쿄보다 서쪽에 있다'라는 상대적인 관계도 함께 반영하는 것과 같아요. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이러한 방식 덕분에 문장의 길이에 따라 유연하게 처리할 수 있고, 단어들 사이의 거리가 멀어질수록 의존성이 감소하는 점도 반영할 수 있습니다. GPT-NeoX-2B, PaLM, CODEGEN, LLaMA 등이 RoPE 방식을 적용한 모델입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1079&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsxdJO/btsPNjhETm6/8A7CdiNv8Tuudy8b8f3peK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsxdJO/btsPNjhETm6/8A7CdiNv8Tuudy8b8f3peK/img.png&quot; data-alt=&quot;회전식 위치 임베딩 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsxdJO/btsPNjhETm6/8A7CdiNv8Tuudy8b8f3peK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsxdJO%2FbtsPNjhETm6%2F8A7CdiNv8Tuudy8b8f3peK%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;1079&quot; height=&quot;624&quot; data-origin-width=&quot;1079&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회전식 위치 임베딩 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4)&amp;nbsp;상대&amp;nbsp;위치&amp;nbsp;편향&amp;nbsp;(Relative&amp;nbsp;Positional&amp;nbsp;Bias)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상대 위치 편향 방식은 모델이 훈련 시 본 문장보다 더 긴 문장을 처리할 수 있도록 돕는, 아주 간단하면서도 효과적인 방법입니다.&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 단어의 위치 정보를 임베딩에 직접 더하는 대신, 쿼리-키 쌍의 어텐션 점수(attention score) 자체에 편향(bias)을 추가하는 방식이에요. &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이 편향은 두 단어 사이의 거리에 비례하는 일종의 '페널티'처럼 작동해요. 즉, 두 단어가 서로 멀리 떨어져 있을수록 어텐션 점수를 더 많이 깎아서 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;모델이 가까운 단어들의 문맥에 더 집중하도록 유도하는 거죠. 이 기법을&lt;/span&gt; '선형 편향을 이용한 어텐션(&lt;b&gt;A&lt;/b&gt;ttention with&lt;b&gt; Li&lt;/b&gt;near &lt;b&gt;Bi&lt;/b&gt;ases, ALiBi)'이라고도 부릅니다. 우리가 앞서 살펴본 BLOOM 모델이 바로 이 ALiBi 방식을 사용했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uAdAk/btsPLePuRDt/UC1aAXcYa976LGTpsPctkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uAdAk/btsPLePuRDt/UC1aAXcYa976LGTpsPctkk/img.png&quot; data-alt=&quot;상대 위치 편향 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uAdAk/btsPLePuRDt/UC1aAXcYa976LGTpsPctkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuAdAk%2FbtsPLePuRDt%2FUC1aAXcYa976LGTpsPctkk%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;500&quot; height=&quot;217&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상대 위치 편향 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 LLM 요리법의 네 번째 단계, '위치 인코딩'에 대한 설명을 모두 마쳤습니다. 우리는 '순서'라는 중요한 정보를 모델에 알려주기 위해, '절대 위치'부터 '상대 위치', '회전식', 그리고 '편향'을 이용하는 방식까지 다양한 방법들을 살펴보았습니다. 이제 다음 단계인 '모델 사전 훈련 (Model Pre-training)'으로 넘어가겠습니다. 드디어 손질과 다지기를 마친 재료들을 냄비에 넣고, 맛의 기본이 되는 '진한 육수'를 우려낼 차례입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;E.&amp;nbsp;모델&amp;nbsp;사전&amp;nbsp;훈련&amp;nbsp;(Model&amp;nbsp;Pre-training)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전 훈련은 LLM 훈련 파이프라인의 가장 첫 번째 단계입니다. 사전 훈련을 통해 LLM은 기본적인 언어 이해 능력을 습득하게 됩니다. 사전 훈련 단계에서 LLM은 보통 정답이 없는(unlabeled) 방대한 양의 텍스트를 가지고, '자기-지도 학습(self-supervised)' 방식으로 훈련됩니다. '자기-지도 학습'이란, 데이터 자체에서 정답을 만들어내어 스스로를 가르치는 방식입니다. 여러 사전 훈련 방식 중 가장 일반적인 세 가지 방식을 소개하겠습니다. 바로 '자기회귀 언어 모델링(autoregressive language modeling)'과 '마스크 언어 모델링(masked language modeling)', 그리고 전문가 혼합(mixture of experts)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;자기회귀 언어 모델링(Autoregressive Language Modeling)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 사전 훈련 방식은 자기회귀 언어 모델링(Autoregressive Language Modeling)입니다. '자기회귀'라는 말은 '자기 자신에게 돌아와 참조한다'는 뜻으로, 모델이 이전에 생성한 단어를 바탕으로 다음에 올 단어를 예측하는 순차적인 방식을 의미합니다. 우리가 앞서 Decoder-only 모델에서 살펴본 바로 그 방식이죠. 좀 더 구체적으로 알아볼까요? n개의 토큰 시퀀스 x₁, ..., xₙ이 주어졌을 때, 모델은 다음에 올 토큰 xₙ₊₁을 예측하도록 훈련됩니다. 이때 모델이 얼마나 잘 예측했는지를 평가하는 손실 함수(loss function)로는 보통 '로그 가능도(log-likelihood)'를 사용합니다. 수식으로 표현하면 다음과 같죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GLUb3/btsPNnqMtOH/MP5cRXxAZwl98kQ1mXtrHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GLUb3/btsPNnqMtOH/MP5cRXxAZwl98kQ1mXtrHk/img.png&quot; data-alt=&quot;자기회귀 언어 모델링(ALM)의 손실 함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GLUb3/btsPNnqMtOH/MP5cRXxAZwl98kQ1mXtrHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGLUb3%2FbtsPNnqMtOH%2FMP5cRXxAZwl98kQ1mXtrHk%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;350&quot; height=&quot;81&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자기회귀 언어 모델링(ALM)의 손실 함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식의 의미는 간단합니다. 'xᵢ부터 xᵢ₊ₙ₋₁까지의 단어들이 주어졌을 때, xᵢ₊ₙ이 출력될 확률 p를 계산하고, 이 확률 값들을 모든 데이터(N)에 대해 더한 값'입니다. 이 가능도 함수 값들의 합을 최대화하면 됩니다. 즉, 가능도 함수 값을 최대화하는 방향으로 학습하라는 의미입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식은 '자기회귀'라는 이름처럼, 이전에 나온 내용을 바탕으로 다음에 올 내용을 순차적으로 예측하는 방식이기 때문에 Decoder-only 모델에 더 적합한 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;마스크 언어 모델링(Masked Language Modeling)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 방식은 마스크 언어 모델링(Masked Language Modeling, MLM)입니다. 문장의 일부 단어들을 가려놓고(masking), 모델이 주변 문맥을 통해 마스킹한 단어들을 예측하도록 훈련합니다. 이 방식은 우리가 BERT에서 살펴본 '빈칸 채우기' 훈련과 같아요. 이 방식을 때로는 '노이즈 제거 오토인코딩(denoising autoencoding)'이라고도 부릅니다. 이 모델의 손실 함수를 수식으로 표현하면 다음과 같습니다.&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;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK8IU9/btsPNe1GsiW/J9xvqPuHeE7HR3O3AqQwYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK8IU9/btsPNe1GsiW/J9xvqPuHeE7HR3O3AqQwYK/img.png&quot; data-alt=&quot;마스크 언어 모델링(MLM)의 손실 함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK8IU9/btsPNe1GsiW/J9xvqPuHeE7HR3O3AqQwYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK8IU9%2FbtsPNe1GsiW%2FJ9xvqPuHeE7HR3O3AqQwYK%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;250&quot; height=&quot;72&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마스크 언어 모델링(MLM)의 손실 함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식의 의미는, '전체 문장 x에서 마스킹한 부분 ~x를 제외한 나머지(x \ ~x)를 보고, 마스킹한 부분 ~x가 무엇일지 맞힐 확률 p를 최대화하자'는 뜻입니다. 즉, 주변 문맥을 보고 빈칸을 정확히 채우는 능력을 기르는 것이 목표죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;전문가 혼합 (Mixture of Experts, MoE)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 사전 훈련 방식은 최근 LLM 분야에서 주로 활용하는 전문가 혼합(Mixture of Experts, MoE) 방식입니다. MoE의 가장 큰 장점은 훨씬 적은 계산 자원으로 모델을 사전 훈련할 수 있다는 점입니다. 같은 예산으로도 모델이나 데이터셋의 규모를 엄청나게 키울 수 있다는 것을 의미하죠. MoE는 두 가지 핵심 요소로 구성됩니다. '거대한 종합병원' 비유를 다시 사용해 볼게요.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;희소 MoE 레이어 (Sparse MoE layers)&lt;/b&gt;: 일반적인 트랜스포머 레이어는 밀한(dense) 레이어로 구성되어 있습니다. 병원에 비유하면, 모든 환자를 진료하는 가정의학과 전문의처럼 순방향 신경망(Feed-Forward Network, FFN)이 딱 하나만 있습니다. 희소 MoE 레이어란 이 '가정의학과 전문의' 한 명을 없애는 대신, 내과 전문의, 외과 전문의, 소아과 전문의 등 여러 명의 전문가로 구성된 전문가 그룹을 두는 것과 같습니다. 이 전문가 한 명 한 명이 바로 순방향 신경망(FFN)인 셈이죠.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;게이트 네트워크 또는 라우터 (Gate network or router)&lt;/b&gt;: 게이트 네트워크란 어떤 토큰(환자)을 어떤 전문가(진료과)에게 보낼지 결정하는 '접수처' 역할을 합니다. 이 라우터 역시 학습을 통해 어떤 환자를 어느 과로 보내는 게 가장 효율적인지를 배우게 되죠.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 점은, 하나의 토큰을 여러 전문가에게 동시에 보낼 수도 있다는 것입니다. 하지만 GLaM 모델에서 봤듯이, 보통은 수많은 전문가 중 가장 관련된 소수(예: 2명)의 전문가만 활성화를 시켜요. 소수에게만 일을 시키고 나머지는 쉬기 때문에 MoE 레이어가 희소(sparse)하다는 것입니다. 이렇게 일부만 골라서 일을 시키는 방식 덕분에 MoE의 연산 효율이 굉장히 좋아졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림은 Switch 트랜스포머의 인코더 블록을 나타냅니다. Switch 트랜스포머의 인코더 블록에서는 단일 FFN 대신 희소 MoE 레이어를 두었습니다. 보다시피 라우터(접수처)를 통해 어떤 FFN(진료과 전문의)으로 가야할지를 결정합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCDTqI/btsPN6PM5pQ/n64tblbC3VLkfyJpcXV3yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCDTqI/btsPN6PM5pQ/n64tblbC3VLkfyJpcXV3yk/img.png&quot; data-alt=&quot;Switch 트랜스포머의 인코더 블록 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCDTqI/btsPN6PM5pQ/n64tblbC3VLkfyJpcXV3yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCDTqI%2FbtsPN6PM5pQ%2Fn64tblbC3VLkfyJpcXV3yk%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;1333&quot; height=&quot;682&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Switch 트랜스포머의 인코더 블록 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 LLM 요리법의 다섯 번째 단계, '모델 사전 훈련'에 대한 설명을 모두 마쳤습니다. '자기-지도 학습'의 세 가지 주요 방식, 즉 자기회귀 언어 모델링, 마스크 언어 모델링, 그리고 전문가 혼합(MoE)에 대해 알아보았습니다. 이제 다음 단계인 '파인튜닝 및 지시 튜닝'으로 넘어가겠습니다. 잘 우려낸 '기본 육수'에 특별한 양념을 더해, 특제 소스 넣어 '우리가 원하는 맛'을 낼 차례에요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;F.&amp;nbsp;파인튜닝&amp;nbsp;및&amp;nbsp;지시&amp;nbsp;튜닝&amp;nbsp;(Fine-tuning&amp;nbsp;and&amp;nbsp;Instruction&amp;nbsp;Tuning)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;파인튜닝(Fine-tuning)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;BERT와 같은 초기 언어 모델들은 주로 자기-지도 학습 방식으로 훈련되었습니다. 하지만 이렇게 훈련된 모델들은 특정 작업에서 바로 좋은 성능을 내지 못했습니다. 그래서 정답이 있는 데이터(labeled data)를 가지고, 특정 작업에 맞게 모델을 '파인튜닝(fine-tuning)'하는 과정이 반드시 필요했죠. 예를 들어, BERT는 11개의 다양한 자연어 처리 작업(텍스트 분류, 질문응답 등)에 맞게 파인튜닝되어 사용되었습니다. 최근 LLM들은 파인튜닝 없이도 어느 정도 작업을 수행할 수 있지만, 특정 데이터나 업무에 맞게 다시 튜닝을 하면 훨씬 좋은 성능을 발휘합니다. 이를테면, OpenAI의 GPT-3.5 Turbo는 특정 작업 데이터로 파인튜닝했을 때 GPT-4보다 더 좋은 결과를 보였죠. 즉, 파인튜닝은 모델을 해당 업무에 특화시키거나 새로운 데이터를 반영할 때 유용한 방식입니다.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파인튜닝을 꼭 하나의 작업에 대해서만 할 필요는 없습니다. 여러 작업을 동시에 학습시키는 방법, 즉 멀티태스크 파인튜닝(multi-task fine-tuning)을 수행해도 됩니다. 예를 들어, '문서 요약' + 'FAQ 자동 응답' + '제품 리뷰 감정 분석' 작업에 대해 한 번에 파인튜닝할 수도 있죠. 이렇게 (멀티태스크) 파인튜닝을 하면 성능이 향상된다는 점 외에도 여러 장점이 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;프롬프트 설계 복잡성 감소&lt;/b&gt;: 일일이 상황 맞는 긴 지시문을 쓰지 않아도 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RAG(Retrieval Augmented Generation; 검색 증강 생성)의 대안&lt;/b&gt;: 모델 자체가 여러 영역의 지식을 갖고 있으므로 RAG의 대안이 될 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 지식 학습&lt;/b&gt;: 원래 훈련 데이터에 없던 새로운 정보에 대해서도 모델이 잘 다룰 수 있게 됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;지시 튜닝(instruction tuning)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM을 파인튜닝하는 주된 이유는 사람이 프롬프트로 지시를 할 경우, 사람 의도에 맞는 결과를 생성하도록 하기 위함입니다. 이러한 학습 방식을 지시 튜닝(instruction tuning)이라고 하죠. 모델이 사용자의 '명령'을 잘 따르게 만드는 것이 지시 튜닝의 핵심입니다. 기존의 사전 훈련 모델은 텍스트 이해나 텍스트 생성 자체는 잘하지만, &quot;~해줘&quot;라는 사람의 요청을 의도에 맞게 수행하지는 못할 수도 있습니다. &lt;b&gt;지시 튜닝은 '지시-응답 쌍(instruction-response pair)' 데이터로 학습을 시켜서, 사람처럼 지시(명령)를 이해하고 결과를 만들어내도록 하는 튜닝 기법입니다.&lt;/b&gt; 예를 들자면, 기존의 사전 훈련 모델은 백과사전에 비유할 수 있습니다. 지식은 많지만 질문의 의도를 모릅니다. 그런데 지시 튜닝된 모델은 선생님이라고 볼 수 있어요. 질문 이해하고 맞춤형 설명을 해주기 때문이죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;파인튜닝과 지시 튜닝의 차이는?&lt;br /&gt;파인튜닝이란 사전 훈련된 모델을 특정 작업이나 데이터에 맞게 추가 학습시켜 성능을 높이는 작업입니다. 지시 튜닝은 여기서 더 나아가 모델이 사람의 지시나 명령을 잘 이해하고 따르도록 만드는 데 초점을 맞춘 특별한 형태의 파인튜닝입니다. 즉, 지시 튜닝은 사용자 명령에 맞는 응답을 생성할 수 있도록 모델을 맞춤 훈련하는 방법입니다. 결국 지시 튜닝은 파인튜닝의 한 종류로 볼 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;자기-지시(self-instruct)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지시 튜닝을 한 모델은 기존의 사전 훈련 모델보다 일반적으로 성능이 좋습니다. 그렇지만 지시 튜닝 데이터를 만드는 게 비싸고 오래 걸립니다. 그런데 &lt;b&gt;자기-지시(self-instruct) 기법을 이용하면 저렴하고 빠르게 지시 튜닝을 할 수 있습니다. &lt;/b&gt;자기-지시란 모델이 스스로 지시-응답 쌍 데이터를 만들어서, 그 데이터를 활용해 스스로 지시 튜닝을 하는 방식입니다. 지시 튜닝 데이터를 사람이 직접 만들지 않고, 모델이 직접 만들어 그 중 좋은 것만 필터링해 사용하는 것입니다. 인력과 비용을 절감할 수 있으며, 빠르고 효율적으로 지시 튜닝을 할 수 있는 방식이죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;여기서 잠깐!&lt;br /&gt;앞서 알파카 모델을 설명할 때 self-instruct에 대해 이미 설명한 바 있습니다. self-instruct라는 이름 때문에 마치 '모델이 진짜 자기 스스로 공부한다'는 느낌을 주지만, 실제로는 조금 다른 구조예요. 자기 자신이라는 말은 '인간의 직접적인 대규모 레이블링 없이' 데이터를 구한다는 뜻에서 쓰입니다. 실제로는 성능이 더 좋은, 즉 이미 튜닝된 교사 모델(teacher model)이 데이터를 만들어주는 경우가 많습니다. 이때 데이터를 만드는 모델(교사 모델)과 그 데이터로 학습하는 모델(학생 모델)이 다른 경우가 많지만, 개념적으로 보면 '모델이 모델을 가르치는' 구조라서 self라는 말을 붙이는 겁니다. 연구 논문에서도 'LLM generates its own instruction-following data to further improve itself' 같은 표현을 씁니다. 하지만 여기서 'itself'는 사실 진정한 의미의 스스로가 아니라 '같은 계열의 모델'이라는 느슨한 의미입니다. 따라서 여기서도 '자기-지시란 모델이 스스로 지시-응답 쌍 데이터를 만들어서, 그 데이터를 활용해 스스로 지시 튜닝을 하는 방식입니다.'라고 표현했지만, 표현상의 편의이지, 엄밀히 말하면 교사 모델과 학생 모델이 다른 경우가 많습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 섹션에서는 특제 소스 넣어 '우리가 원하는 맛'을 내는 방법을 알아보았습니다. 그럼 이제 LLM 요리법의 일곱 번째 단계, 인간의 입맛에 맞게 마지막 간을 맞추는 '정렬 (Alignment)'로 넘어가겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;G. 정렬 (Alignment)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;AI 정렬(Al Alignment)이란 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;인간의 목표, 선호도, 원칙&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 부합하도록 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;AI 시스템의&amp;nbsp;&lt;/span&gt;방향을 조정하는 작업입니다. &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;LLM은 기본적으로 다음 단어를 예측하도록 사전 훈련되었기 때문에, 종종 &lt;/span&gt;&lt;span&gt;의도하지 않은 행동&lt;/span&gt;&lt;span&gt;을 보이곤 합니다. &lt;/span&gt;&lt;b&gt;&lt;span&gt;유해하거나(toxic), 해롭거나(harmful), 오해의 소지가 있거나(misleading), 편향된(biased) 내용&lt;/span&gt;&lt;span&gt;을 생성할 우려가 있죠.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;그러므로 인간의 가치에 맞게 방향을 잡아주는 정렬이 반드시 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;바로 앞에서 배운 '지시 튜닝'이 LLM을 정렬시키는 첫 번째 단계라고 할 수 있습니다. &lt;/span&gt;&lt;span&gt;하지만 많은 경우, 모델의 정렬 수준을 더욱 향상시키고 의도치 않은 행동을 피하기 위해서는 &lt;/span&gt;&lt;span&gt;추가적인 정렬을 해주어야 합니다. 이번 섹션에서는 대표적인 정렬 기법 몇 가지를 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;RLHF (Reinforcement Learning from Human Feedback)와 RLAIF(Reinforcement Learning from AI Feedback)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 유명한 정렬 방식으로는 RLHF(인간 피드백 기반 강화학습, &lt;b&gt;R&lt;/b&gt;einforcement &lt;b&gt;L&lt;/b&gt;earning from &lt;b&gt;H&lt;/b&gt;uman &lt;b&gt;F&lt;/b&gt;eedback)와 RLAIF(AI 피드백 기반 강화학습, &lt;b&gt;R&lt;/b&gt;einforcement &lt;b&gt;L&lt;/b&gt;earning from &lt;b&gt;AI&lt;/b&gt; &lt;b&gt;F&lt;/b&gt;eedback)가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 &lt;b&gt;RLHF는 보상 모델(reward model)을 사용해 인간의 피드백을 바탕으로 정렬해가는 기법입니다.&lt;/b&gt; 이때 보상 모델이 중요한데, 보상 모델은 '사람이 어떤 답변을 더 좋아하는지 평가하는 심사위원' 역할을 하는 모델이에요. RLHF를 통한 학습 과정은 대략 이렇습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;먼저 LLM(사전 훈련된 기존 언어 모델)에게 여러 질문을 하고 답변을 몇 개씩 생성합니다.&lt;/li&gt;
&lt;li&gt;사람이 이 답변들을 보고 &quot;어떤 게 더 좋다&quot; 하고 순위를 매겨줍니다(예: 1등, 2등, 3등&amp;hellip;).&lt;/li&gt;
&lt;li&gt;인간의 순위 데이터를 바탕으로 보상 모델을 훈련합니다. &amp;rarr; 이제 이 보상 모델은 '답변을 보고 사람의 선호도를 점수로 예측'할 수 있게 됩니다.&lt;/li&gt;
&lt;li&gt;그다음 LLM을 다시 훈련할 때, 보상 모델이 심사위원 역할을 하며 &quot;이 답변이 좋다&quot; 또는 &quot;이건 별로다&quot; 하고 점수를 매깁니다.&lt;/li&gt;
&lt;li&gt;LLM은 이 점수를 높이려고 스스로 답변 방식을 조정합니다. (강화학습 단계)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면, 사람의 평가 데이터를 수집하고 &amp;rarr; 그 데이터로 보상 모델을 훈련한 뒤 &amp;rarr; 훈련된 보상 모델을 활용해 LLM을 강화학습하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;RLAIF는 여기서 한 걸음 더 나아가, 인간 대신 '이미 잘 훈련된 다른 AI 모델'을 피드백 제공자로 사용하는 방식입니다.&lt;/b&gt; 더 똑똑하거나 잘 정렬된 AI 모델이 사람 대신 평가를 하는 거죠. AI 모델의 피드백 데이터를 기반으로 보상 모델을 훈련하여, 이를 통해 강화학습을 하는 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;DPO (Direct Preference Optimization)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RLHF는 아주 강력한 기법이지만, 인간의 피드백을 받고, 그 피드백을 바탕으로 보상 모델을 따로 훈련시키고, 훈련된 보상 모델을 기반으로 LLM을 강화학습해 다시 튜닝하는 과정을 거쳐야 합니다. 그러므로 매우 복잡하고 불안정하다는 단점이 있죠. 이 문제를 해결하기 위해 DPO(직접 선호도 최적화, &lt;b&gt;D&lt;/b&gt;irect &lt;b&gt;P&lt;/b&gt;reference &lt;b&gt;O&lt;/b&gt;ptimization)라는 새로운 접근법이 등장했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DPO는 '보상 함수와 최적 정책(optimal policy) 사이에는 수학적인 매핑 관계가 있다는 점'을 활용합니다. 이 사실을 활용해, 복잡한 보상 최대화 문제를 '단일 정책 학습 단계'만으로 정확하게 최적화할 수 있음을 보여주었습니다. 즉, 복잡한 강화학습 문제를 사람의 선호도 데이터에 기반한 분류(classification) 문제로 바꿔버린 것입니다.&lt;/b&gt; &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;그 결과, DPO는 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;보상 모델을 따로 만들 필요도 없고, 튜닝 중에 LLM에서 샘플링할 필요도 없으며, 복잡한 하이퍼파라미터 튜닝도 필요도 없습니다. 그러면서도&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;훨씬 안정적이고 계산 효율적이며 성능도 좋습니다. 즉, RLHF의 여러 단계를 하나로 통합하여 훨씬 간단하게 만든 거죠. &lt;/span&gt;실제로 DPO로 정렬한 모델은 감성 제어 능력에서 RLHF를 능가하고, 요약 작업의 응답 품질도 향상시키는 결과를 보여주었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CtQ8p/btsPMCovDlz/SqkwKhz8msJTGSEOjjm5d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CtQ8p/btsPMCovDlz/SqkwKhz8msJTGSEOjjm5d1/img.png&quot; data-alt=&quot;RLHF와 DPO 방식 비교 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CtQ8p/btsPMCovDlz/SqkwKhz8msJTGSEOjjm5d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCtQ8p%2FbtsPMCovDlz%2FSqkwKhz8msJTGSEOjjm5d1%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;1546&quot; height=&quot;342&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RLHF와 DPO 방식 비교 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;KTO (Kahneman-Tversky Optimization)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 최근에 등장한 정렬 기법은 KTO(카너먼-트버스키 최적화, &lt;b&gt;K&lt;/b&gt;ahneman-&lt;b&gt;T&lt;/b&gt;versky &lt;b&gt;O&lt;/b&gt;ptimization)입니다. 이 방식의 가장 큰 혁신은 필요한 데이터의 종류를 바꿨다는 점입니다. 기존의&amp;nbsp;RLHF나 DPO는 '선호도 쌍 데이터(paired preference data)'가 반드시 필요했습니다. 즉, '답변 A와 답변 B 중에서, 인간은 B를 더 좋아한다'와 같은 형태의 데이터가 필요했어요. 하지만 현실적으로 이런 비교 데이터를 구하기는 꽤 어렵습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;b&gt;KTO는 이런 선호도 쌍 데이터가 필요 없습니다. 대신, '이 답변은 좋은 답변(desirable)이다' 또는 '이 답변은 나쁜 답변(undesirable)이다'라는 단순한 데이터만 있으면 됩니다.&lt;/b&gt; 이러한 데이터는 'RLHF나 DPO가 필요로 했던 선호도 쌍 데이터'에 비해 더 쉽게 수집할 수 있지요. &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;선호도 쌍 데이터를 사용하지 않았음에도 불구하고, KTO로 정렬된&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 모델들은 DPO로 정렬된 모델들과 비슷하거나 더 나은 성능을 보여주었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIiaVL/btsPOElcsMk/gFLuNhqYUjTMDRTHmdlAf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIiaVL/btsPOElcsMk/gFLuNhqYUjTMDRTHmdlAf0/img.png&quot; data-alt=&quot;RLHF, DPO, KTO를 통한 정렬 방식 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIiaVL/btsPOElcsMk/gFLuNhqYUjTMDRTHmdlAf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIiaVL%2FbtsPOElcsMk%2FgFLuNhqYUjTMDRTHmdlAf0%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;1534&quot; height=&quot;669&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RLHF, DPO, KTO를 통한 정렬 방식 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로 LLM 요리법의 일곱 번째 단계인 정렬에 대해 다루었습니다. LLM이 유용하고 안전한 답변을 하도록 만드는 여러 기법들을 살펴보았죠. 사람의 피드백을 직접 사용하는 RLHF부터, 보상 모델을 없애 정렬 과정을 단순화한 DPO, 그리고 필요한 데이터의 종류까지 바꾼 KTO에 이르기까지, 정렬 기술이 어떻게 발전해왔는지 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 정렬까지 마쳐 맛있는 요리가 완성되었네요. 다음 단계는 완성된 요리를 손님에게 '어떻게 내놓을지' 결정하는 '디코딩 전략 (Decoding Strategies)'입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;H.&amp;nbsp;디코딩&amp;nbsp;전략&amp;nbsp;(Decoding&amp;nbsp;Strategies)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코딩이란 사전 훈련된 LLM을 사용하여 텍스트를 생성하는 과정을 의미합니다. LLM이 입력을 받아 결과를 출력하는 과정을 간략히 설명하면 이렇습니다. 먼저, 사용자가 입력한 프롬프트의 각 토큰을 토크나이저가 토큰 ID라는 숫자로 변환합니다. 그다음, 언어 모델이 이 토큰 ID들을 입력으로 받아, 다음에 올 가장 가능성 높은 토큰(또는 토큰들의 시퀀스)을 예측합니다. 마지막으로, &lt;b&gt;모델은 '로짓(logits)'이라는 숫자 값을 생성하고, 이 로짓을 소프트맥스(softmax) 함수를 통해 확률로 변환하여 최종 결과물을 만듭니다. 이 마지막 단계에서 어떤 토큰을 최종적으로 선택할지에 따라 답변의 스타일이 달라지는데, 이를 결정하는 전략이 바로 '디코딩 전략'입니다.&lt;/b&gt; 여러 가지 디코딩 전략이 있습니다. 가장 대중적인 전략으로는 탐욕 탐색(greedy search), 빔 탐색(beam search), 그리고 Top-k, Top-p와 같은 다양한 샘플링 기법들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 가장 단순한 디코딩 전략인 '탐욕 탐색(Greedy Search)'부터 알아보겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1)&amp;nbsp;탐욕&amp;nbsp;탐색(greedy&amp;nbsp;search)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;탐욕 탐색은 가장 단순하면서도 직관적인 방법입니다. 매 단계마다 확률이 가장 높은 토큰을 다음 토큰으로 선택하고, 나머지 모든 옵션은 버리는 방식입니다. &lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;마치 갈림길이 나올 때마다 무조건 가장 넓어 보이는 길만 선택하는 등산객과 같아요. 당장은 그 길이 가장 좋아 보이겠지만, 그 길 끝에 낭떠러지가 있을지는 전혀 고려하지 않는 방식이죠. 오늘만 사는 셈입니다.&lt;/span&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;&lt;span&gt;2)&amp;nbsp;빔&amp;nbsp;탐색(beam&amp;nbsp;search)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;탐욕 탐색이 가장 확률이 높은 단 하나의 길만 고집했다면,&lt;/span&gt;&lt;span&gt; 빔 탐색은 그보다 조금 더 신중한 방법입니다.&lt;/span&gt;&lt;b&gt;&lt;span&gt; 빔 탐색에서는 매 단계에서 가장 가능성 높은 토큰 &lt;/span&gt;N개&lt;span&gt;를 모두 고려합니다.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 여기서 N은 빔의 개수(number of beams)를 일컫습니다. 이번에도 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;등산객 비유를 다시 사용해볼게요.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 탐욕 탐색 등산객은 가장 넓어 보이는 길 하나로만 갔죠.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 반면,&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 빔 탐색 등산객은 '빔의 개수'가 3이라면,&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;가장 넓어 보이는 길 3개를 모두 기억해두고, 각 길을 따라 한 걸음씩 더 가봅니다.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 그리고 그다음 단계에서 다시 가장 유망한 3개의 경로만 남기고 나머지는 버리는 과정을 반복합니다. &lt;/span&gt;&lt;span&gt;이 과정은 미리 정해진 최대 문장 길이에 도달하거나,&lt;/span&gt;&lt;span&gt; 문장의 끝을 알리는 토큰이 나타날 때까지 반복됩니다.&lt;/span&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&gt;&lt;span&gt; 빔의 크기가 2이고 토큰의 최대 길이가 5라면,&lt;/span&gt;&lt;span&gt; 빔 탐색은 총 2⁵=&lt;/span&gt;&lt;span&gt;32개의 가능한 시퀀스를 추적해야 합니다.&lt;/span&gt;&lt;span&gt; 따라서 탐욕 탐색보다는 &lt;/span&gt;계산량이 훨씬 많고 느리지만&lt;span&gt;,&lt;/span&gt;&lt;span&gt; 더 자연스럽고 일관성 있는 문장을 찾아낼 가능성이 높습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;3)&amp;nbsp;Top-k&amp;nbsp;샘플링&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Top-k 샘플링은 언어 모델이 생성한 확률 분포를 사용해, 가장 가능성이 높은 k개의 선택지 중에서&amp;nbsp;하나의 토큰을 선택하는 기법입니다. &lt;/b&gt;예를 들어, k=3이라고 설정하면, 모델은 수많은 토큰 후보 중 확률이 가장 높은 1등, 2등, 3등 토큰만 남기고 나머지는 모두 버립니다. 그리고 그 세 토큰의 확률에 따라(예: 1등이 50%, 2등이 30%, 3등이 20%) 셋 중 하나를 선택하죠. 다시 말해, 50%의 확률로 1등 토큰을 생성하고, 30%의 확률로 2등 토큰을 생성하고, 20%의 확률로 3등 토큰을 생성하는 것입니다. 이를 통해 가장 그럴듯한 토큰 중에서 약간의 무작위성을 부여하여 더 창의적인 문장을 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 무작위성을 조절하는 파라미터가 바로 '온도(temperature)'입니다. 온도 파라미터  가 0이면 항상 확률이 가장 높은 단어만 선택하므로 탐욕 탐색처럼 결정론적인(deterministic) 방식이 됩니다. 반대로  가 커질수록 확률분포에 따라 다양한 단어들이 선택될 가능성이 생깁니다. 창의적인 답변이 나올 가능성이 높아지는 거죠. 온도 파라미터( )에 따라 로짓(x)별 확률을 계산하는 수식은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8w0y0/btsPLDVUE2c/e3jIecPHjeGRujnMD8EVY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8w0y0/btsPLDVUE2c/e3jIecPHjeGRujnMD8EVY0/img.png&quot; data-alt=&quot;확률 분포 수식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8w0y0/btsPLDVUE2c/e3jIecPHjeGRujnMD8EVY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8w0y0%2FbtsPLDVUE2c%2Fe3jIecPHjeGRujnMD8EVY0%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;72&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;151&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;여기서 x는 모델이 계산한 각 단어의 점수(로짓)이고,  가 바로 온도 파라미터입니다. 수식을 보면, 로짓 x를 온도  로 나누고 있다는 것을 알 수 있어요.  =0이면 k가 몇이든 상관없이 항상 확률 1인 토큰만 선택합니다(즉, 탐욕 탐색과 동일한 출력을 합니다).  =1이면 원래의 확률 분포를 사용해 토큰을 선택합니다.   &amp;gt; 1 이면 확률 분포가 평평해져 top-k 내에서도 더 다양한 토큰을 선택하게 됩니다.  가 지나치게 커지면 엉뚱한 토큰을 선택할 수도 있겠죠.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;4)&amp;nbsp;Top-p&amp;nbsp;샘플링&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Top-p 샘플링은 '핵 샘플링(Nucleus sampling)'이라고도 불리는데, 이 방식은 Top-k와는 약간 다른 접근법입니다. k개라는 개수를 정해두는 대신, 선택된 토큰들의 확률 합이 p값을 초과할 때까지 확률이 높은 순서대로 토큰을 선택하여 '핵(nucleus)'이라는 후보군을 만드는 방식입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그러므로 Top-k 방식은 후보군의 개수가 항상 k개로 고정되어 있지만, Top-p 방식은 상황에 따라 후보군의 개수가 유동적으로 변합니다.&lt;/b&gt; 예를 들어, 다음 단어가 아주 확실한 상황에서는 후보가 1~2개만 될 수도 있고, 여러 단어가 비등한 확률을 갖는 애매한 상황에서는 후보가 10개 이상 될 수도 있죠. 이 덕분에 더 다양하고 창의적인 결과물을 얻을 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;I. 비용 효율적인 훈련, 추론, 적응, 압축 (Cost-Effective Training, Inference, Adaptation, Compression)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 파트에서는 LLM을 더 효율적으로 훈련하고 활용하기 위한 여러 기법에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 최적화된 훈련 (Optimized Training)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 훈련을 최적화하기 위한 여러 프레임워크가 있는데, 여기서는 주요 기법 두 가지를 소개하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ZeRO (제로) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 주자는 ZeRO입니다. ZeRO는 '&lt;b&gt;Ze&lt;/b&gt;ro &lt;b&gt;R&lt;/b&gt;edundancy &lt;b&gt;O&lt;/b&gt;ptimizer(중복성 제로 최적화기)'의 약자입니다. &lt;b&gt;여러 개의 GPU를 사용해 거대 모델을 훈련할 때 발생하는 '메모리 중복' 문제를 해결하여 훈련 속도를 크게 향상시키는 기술입니다.&lt;/b&gt; 여러 명의 요리사(GPU)가 한 가지 요리(거대 모델)를 함께 만든다고 가정해봅시다. 기존 방식에서는 모든 요리사가 각자 똑같은 전체 레시피 책(모델 파라미터)과 모든 재료(데이터)를 가지고 있어야 해서 주방(메모리)이 꽉 차고 비효율적이었습니다. ZeRO는 이 레시피 책을 여러 부분으로 나눠, 각 요리사가 자기가 맡은 부분의 레시피만 가지고 있도록 역할을 분담시키는 방식이에요. 이를 통해 각 주방의 공간(메모리)을 크게 아낄 수 있죠. ZeRO는 데이터 및 모델 병렬 훈련에서 발생하는 메모리 중복을 제거하면서도, GPU 간의 통신량은 낮게 유지하여 훈련 효율을 크게 높였습니다. 이 덕분에 GPU 개수에 비례하여 모델 크기를 확장하는 것이 가능해졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;RWKV&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로&amp;nbsp;살펴볼&amp;nbsp;기술은&amp;nbsp;RWKV입니다.&amp;nbsp;RWKV는&amp;nbsp;'&lt;b&gt;R&lt;/b&gt;eceptance&amp;nbsp;&lt;b&gt;W&lt;/b&gt;eighted&amp;nbsp;&lt;b&gt;K&lt;/b&gt;ey&amp;nbsp;&lt;b&gt;V&lt;/b&gt;alue'의 약자로, 이전의 ZeRO와는 조금 다르게, '훈련 방식'이 아닌 '모델 아키텍처'를 개선한 기법입니다. &lt;b&gt;RWKV의 핵심은 트랜스포머의 장점과 RNN의 장점을 합치는 것입니다. RWKV는 훈련할 때는 트랜스포머처럼 병렬로 빠르게 학습하고, 추론할 때는 RNN처럼 메모리를 적게 쓰고 빠르게 답변을 생성하도록 설계되었습니다.&lt;/b&gt; 이러한 독창적인 구조 덕분에, RWKV는 수백억 개의 파라미터를 갖는 최초의 비-트랜스포머(non-transformer) 아키텍처가 되었습니다. 트랜스포머가 유일한 정답이 아닐 수 있다는 가능성을 보여준 중요한 사례죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J93GR/btsPNlzJKhS/eyRzrPGkpusKs5PmyxjDF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J93GR/btsPNlzJKhS/eyRzrPGkpusKs5PmyxjDF1/img.png&quot; data-alt=&quot;RWKV 아키텍처 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J93GR/btsPNlzJKhS/eyRzrPGkpusKs5PmyxjDF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ93GR%2FbtsPNlzJKhS%2FeyRzrPGkpusKs5PmyxjDF1%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;500&quot; height=&quot;503&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RWKV 아키텍처 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2)&amp;nbsp;저차원&amp;nbsp;적응&amp;nbsp;(Low-Rank&amp;nbsp;Adaption,&amp;nbsp;LoRA)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LoRA는 파인튜닝 시에 훈련시켜야 할 파라미터의 수를 극적으로 줄여주는 기술입니다. LLM이 가진 전체 파라미터를 파인튜닝하면 엄청난 메모리와 계산 비용이 듭니다. LoRA는 바로 이 문제를 해결하기 위해 등장했어요. &lt;b&gt;LoRA의 핵심 아이디어는, '사전 훈련된 거대 모델의 원래 가중치(weights)'와 '특정 작업에 맞게 파인튜닝된 후의 가중치' 사이의 차이(&amp;Delta;W)는 비교적 단순한 구조('낮은 내재적 차원, low intrinsic rank')를 가질 것이라는 통찰에서 시작합니다.&lt;/b&gt; 거대한 명화 원본(사전 훈련된 모델)이 있다고 상상해볼까요. 이 그림을 '밤 분위기'로 살짝 바꾸고 싶을 때(파인튜닝), 그림 전체를 처음부터 다시 그릴 필요는 없죠. 대신, '푸른색 옅은 필터'와 '어두운 그림자 효과'를 내는 두 개의 얇은 투명 필름(두 개의 작은 행렬)만 덧씌우면 됩니다. LoRA는 바로 이 두 개의 얇은 필름만 학습시키는 방식입니다. 원본 그림은 건드리지 않고(frozen) 그대로 두죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학적으로, 이 '차이(&amp;Delta;W)'는 두 개의 훨씬 작은 행렬(A와 B)의 곱, 즉 BA로 표현할 수 있습니다. 수식으로 표현하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;W₀&amp;nbsp;+ &amp;Delta;W = W₀ + BA&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 W₀는 사전 훈련된 모델의 가중치이고, &amp;Delta;W는 '사전 훈련된 거대 모델의 원래 가중치'와 '특정 작업에 맞게 파인튜닝된 후의 가중치' 사이의 차이입니다. 즉, 파인튜닝 후 가중치가 얼마나 바뀌었는지를 나타내는 값이죠. W₀는 이미 알고 있는 값이므로 &amp;Delta;W만 구할 수 있다면 파인튜닝 효과를 얻을 수 있다는 말이에요. 그런데 만약 &amp;Delta;W가 BA와 거의 같다면, 그리고 B와 A 각각이 훨씬 작은 행렬이라면, BA만 잘 학습하면 파인튜닝 효과를 얻을 수 있게 됩니다. 그래서 LLM이 가진 전체 파라미터에 대해 파인튜닝하기보다는 훨씬 계산 비용이 적게 드는 BA만 학습하자는 의미입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;731&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQSUAk/btsPLIQhOrq/kP37GG8OFH8sOro3dXrFD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQSUAk/btsPLIQhOrq/kP37GG8OFH8sOro3dXrFD0/img.png&quot; data-alt=&quot;LoRA 구조 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQSUAk/btsPLIQhOrq/kP37GG8OFH8sOro3dXrFD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQSUAk%2FbtsPLIQhOrq%2FkP37GG8OFH8sOro3dXrFD0%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;400&quot; height=&quot;331&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;731&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LoRA 구조 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;LoRA는 거대한 원본 행렬(W₀)은 그대로 두고, 이 두 개의 작은 행렬 A와 B만 새로 학습시킵니다.&lt;/b&gt; 이 덕분에 훈련이 훨씬 빠르고, 메모리를 적게 사용하며, 결과물로 나오는 모델의 가중치(A와 B 행렬)도 수백 MB 수준으로 아주 작아져서 저장하고 공유하기가 매우 쉬워집니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3)&amp;nbsp;지식&amp;nbsp;증류&amp;nbsp;(Knowledge&amp;nbsp;Distillation)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM을 가볍게 만드는 또 다른 기술은 지식 증류(Knowledge Distillation)입니다. &lt;b&gt;지식 증류는 더 크고 똑똑한 '교사(선생님)' 모델의 지식을, 더 작고 가벼운 '학생' 모델에게 전수하여 가르치는 기법입니다.&lt;/b&gt; 쉽게 말해, 더 큰 모델이 가진 지식을 추출(증류, distill)해, 작은 모델에게 전수(transfer)하는 기법입니다. 때로는 하나의 교사 모델이 아니라, 여러 교사 모델의 지식을 학생 모델에게 전수하기도 합니다. 이 방식을 통해 우리는 거대 모델의 성능은 최대한 유지하면서도, 엣지 디바이스(예: 스마트폰)에서도 작동할 수 있는 작고 빠른 모델을 만들 수 있습니다. 아래 그림은 학생 모델(student model)이 교사 모델(teacher model)로부터 지식 증류 방식으로 어떻게 학습하는지를 보여주는 그림입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1528&quot; data-origin-height=&quot;663&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wn6pU/btsPM2mZ0we/kcTGBnjL8KkKGK3x5L5XFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wn6pU/btsPM2mZ0we/kcTGBnjL8KkKGK3x5L5XFk/img.png&quot; data-alt=&quot;지식 증류 과정 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wn6pU/btsPM2mZ0we/kcTGBnjL8KkKGK3x5L5XFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwn6pU%2FbtsPM2mZ0we%2FkcTGBnjL8KkKGK3x5L5XFk%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;1528&quot; height=&quot;663&quot; data-origin-width=&quot;1528&quot; data-origin-height=&quot;663&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;지식 증류 과정 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식 증류의 종류는 세 가지입니다. 응답 증류, 특징 증류, 그리고 API 증류가 있죠. 다시 말해, 지식은 응답 증류, 특징 증류, API 증류라는 여러 다른 형태의 학습을 통해 전달될 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&amp;nbsp;&lt;b&gt;응답 증류(response distillation)&lt;/b&gt;: 응답 증류 방식은 오직 교사 모델의 최종 결과물(outputs)에만 관심을 가집니다. 학생 모델이 교사 모델과 똑같은 결과물을 만들어내도록 훈련을 하는 거죠. 예측이라는 의미에서 비슷하게 수행하는 방법을 가르치려고 하는 거에요. 마치 학생이 교사의 '최종 답안지'만 보고 그대로 따라 쓰면서 학습하는 것과 같아요. 과정은 모르지만, 결과물을 똑같이 만들어내는 훈련을 하는 겁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징 증류(feature distillation)&lt;/b&gt;: 이 방식은 최종 결과물뿐만 아니라, 교사 모델이 정답을 찾아가는 중간 계산 과정까지 학습하여, 학생 모델이 교사 모델의 '사고방식'을 더 깊이 있게 배우도록 하는 방식입니다. 그러므로 중간 레이어(intermediate layers)까지 학습하게 됩니다. 이것은 학생이 교사의 '최종 답안지'뿐만 아니라, 그 답을 이끌어내기까지의 '상세한 풀이 과정'까지 함께 보면서 학습하는 것과 같아요. 이를 통해 학생은 단순히 답을 외우는 것을 넘어, 문제를 푸는 근본적인 원리를 배울 수 있게 되죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;API 증류(API&amp;nbsp;distillation)&lt;/b&gt;: 마지막 방식은 API 증류입니다. 이 방식은 (OpenAI처럼) API 형태로만 제공되어 모델의 내부를 볼 수 없는, 비공개 LLM의 답변을 활용하여 학생 모델을 훈련시키는 방식입니다. 작동 원리는 '응답 증류'와 유사합니다. 비공개 LLM에게 질문을 던지고 받은 답변을 '정답'으로 삼아, 학생 모델이 그 답변을 따라 하도록 학습시키는 거죠. 다만 이 방식에는 몇 가지 한계가 있습니다. 보통 유료 API를 사용해야 하고, API 제공사의 정책(예: 우리 API로 만든 모델로 우리와 경쟁하지 마시오)에 따라 사용에 제약이 있을 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4)&amp;nbsp;양자화&amp;nbsp;(Quantization)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;양자화(quantization)는 행렬 연산의 정밀도(precision)를 낮추어, 모델의 크기를 줄이고 속도를 빠르게 만드는 기술입니다.&lt;/b&gt; 컴퓨터에서 숫자를 표현할 때는 정밀도에 따라 사용하는 비트(bit) 수가 다릅니다. 예컨대, 소수점까지 아주 세밀하게 표현하는 32비트 실수(Float-32)는 정확하지만, 그만큼 많은 공간을 차지하고 계산도 느리죠. 반면, 정수만 표현하는 8비트 정수(Int-8)는 표현 범위는 좁지만 훨씬 가볍고 빠릅니다. 양자화는 바로 이 Float-32를 Int-8과 같은 더 낮은 비트로 변환해, 성능 하락은 최소화하면서 속도를 빠르게 만드는 과정입니다. 양자화는 적용 시점에 따라 크게 두 가지 방식으로 나뉩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;훈련 후 양자화(post-training quantization)&lt;/b&gt;: 이미 훈련이 완료된 모델을 양자화하는 방식입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;양자화 인식 훈련(quantization-aware training)&lt;/b&gt;: 훈련 과정 자체에 양자화 기준을 포함시켜, 처음부터 양자화된 모델을 만들고 최적화하는 방식입니다. 이렇게 하면 훈련을 마친 모델은 별도로 훈련 후 양자화를 거칠 필요가 없습니다. 게다가 훈련 과정에서 양자화가 되었기 때문에 성능도 훈련 후 양자화보다 더 좋을 가능성이 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로 LLM을 어떻게 훈련하는지 전 과정을 모두 알아보았습니다. 다음 장에서는 LLM을 '어떻게 사용하고 더 강력하게 만드는지'에 대해 알아봅니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IV.&amp;nbsp;LLM은&amp;nbsp;어떻게&amp;nbsp;사용되고,&amp;nbsp;어떻게&amp;nbsp;더&amp;nbsp;강력하게&amp;nbsp;만드는가?&amp;nbsp;(HOW&amp;nbsp;LLMs&amp;nbsp;ARE&amp;nbsp;USED&amp;nbsp;AND&amp;nbsp;AUGMENTED)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;훈련이 끝난 LLM은 기본적인 프롬프트를 통해 다양한 작업을 수행할 수 있습니다. 하지만, LLM의 잠재력을 최대한 활용하거나 그 단점을 해결하려면, 외부 수단을 이용해 모델을 '증강(augment)'시켜야 할 필요가 있습니다. 이 장에서는 먼저 LLM의 주요 단점, 특히 '환각(hallucination)' 현상에 대해 깊게 살펴볼 것입니다. 그다음, 프롬프트 기법과 여러 증강 접근법이 어떻게 이러한 단점을 해결할 뿐만 아니라, LLM의 능력을 확장시켜 외부 세계와 상호작용하는 완전한 'AI 에이전트(AI agent)'로까지 발전할 수 있는지를 설명할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;장에서는&amp;nbsp;크게&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;주제들을&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;b&gt;LLM의 한계 (LLM limitations)&lt;/b&gt;: LLM이 가진 근본적인 약점들을 알아봅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프롬프트 엔지니어링 (Using LLMs: Prompt Design and Engineering)&lt;/b&gt;: LLM을 잘 사용하기 위한 '질문법'을 배웁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외부 지식으로 LLM 증강하기 - RAG (Augmenting LLMs through external knowledge - RAG)&lt;/b&gt;: LLM에게 '오픈북 시험'을 보게 하는 방법을 알아봅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외부 도구 사용하기 (Using External Tools)&lt;/b&gt;: LLM에게 '계산기'나 '검색 엔진' 같은 도구를 쥐여주는 방법을 살펴봅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LLM 에이전트 (LLM Agents)&lt;/b&gt;: 이 모든 것을 합쳐, 스스로 생각하고 행동하는 AI를 만드는 법을 살펴봅니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. LLM의 한계 (LLM limitations)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM은 매우 강력하지만, 근본적인 한계점들을 가지고 있습니다. 이 한계들을 이해해야만 LLM을 더 효과적으로 활용하고 보완할 수 있죠. 다음과 같은 주요 한계점이 있어요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;상태/메모리 부족&lt;/b&gt;: LLM은 이전 대화 내용을 기억하지 못합니다. 매번 새로운 프롬프트를 받을 때마다 이전 대화는 잊어버리죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;일관성 부족 (확률적 특성)&lt;/b&gt;: 동일한 프롬프트를 여러 번 입력해도, 매번 다른 답변이 나올 수 있습니다. '온도' 같은 매개변수로 변동성을 줄일 수는 있지만, 이런 확률적인 특성은 내재적인 한계입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오래된 정보 (stale information)&lt;/b&gt;: LLM은 훈련 데이터에 포함된 정보만 알고 있습니다. 따라서 실시간 정보나 최신 사건에 대해서는 알지 못하며, 스스로 외부 데이터에 접근할 수도 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;거대한 크기&lt;/b&gt;: 모델이 매우 크기 때문에 훈련과 서비스 운영을 위해서는 아주 비싼 GPU 장비가 많이 필요합니다. 게다가 모델이 크기 때문에 때로는 응답 속도가 느려지기도 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;환각 (Hallucination, 할루시네이션)&lt;/b&gt;: LLM은 '진실'이 무엇인지 모릅니다. 그렇기 때문에 그럴듯하지만 사실이 아니거나, 훈련 데이터에 없던 내용을 마치 사실인 것처럼 꾸며서 말하는 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 한계점들이 모두 다 문제가 될 수 있지만, 특히 주목을 많이 받고 있는 '환각(Hallucination)' 현상에 대해 더 깊이 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;환각 (Hallucination)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 분야에서 '환각'이라는 현상은 큰 관심사입니다. &quot;Survey of Hallucination in Natural Language Generation&quot;라는 논문에서는 &lt;b&gt;LLM의 환각을 '말도 안 되거나(nonsensical) 주어진 출처에 충실하지 않은(unfaithful) 콘텐츠를 생성하는 것'으로 정의합니다.&lt;/b&gt; 이 환각이라는 용어는 원래 심리학 용어지만, 인공지능 분야에서 그 의미를 빌려와 사용하게 된 것입니다. LLM의 환각은 크게 두 가지 유형으로 나눕니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;본질적(내재적) 환각 (Intrinsic Hallucinations)&lt;/b&gt;: 생성된 내용이 출처(source)의 내용과 직접적으로 충돌하는 경우입니다. 사실 관계에 오류를 만들거나 논리적 모순을 일으키는 것이죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외재적 환각 (Extrinsic Hallucinations)&lt;/b&gt;: 생성된 내용이 출처와 충돌하지는 않지만, 검증할 수 없는(unverifiable) 내용을 포함하는 경우입니다. 추측성이거나 확인할 수 없는 요소들이 여기에 해당합니다. 예를 들어, LLM에게 '사과는 빨갛다'는 정보만 알려주었는데, LLM이 '사과는 빨갛고 거칠다'라고 답변했다면, '거칠다'라는 정보가 외재적 환각에 해당하죠. 주어진 출처의 내용('사과는 빨갛다')과 충돌하지는 않지만, 그 출처만으로는 해당 내용을 확인할 수 없기 때문이에요.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'출처'의 정의는 작업에 따라 다릅니다. 예를 들어, 대화형 작업에서는 '출처'가 모델이 학습한 '세상 지식(world knowledge)' 전체를 의미하지만, 문서 요약 작업에서는 '출처'가 입력한 원문 텍스트 자체를 의미합니다. 따라서 환각의 영향은 어떤 작업을 하느냐에 따라 크게 달라지죠. 가령, 시를 쓰는 것과 같은 창의적인 작업에서는 사실과 다른 내용(환각)이 오히려 유익하거나 허용될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LLM에서 환각이 발생하는 근본적인 이유는, 인터넷이나 책 등 매우 다양한 데이터로 모델을 훈련하는데, 모델은 진실과 거짓이 무엇인지 모른 채 확률적으로 가장 그럴듯한 다음 단어를 예측하도록 설계되었기 때문입니다.&lt;/b&gt; 진실에 대한 개념 자체가 없는 거죠. 지시 튜닝이나 RLHF 같은 기술을 활용해 사실에 가까운 답변을 하도록 유도하고 있지만, 이러한 확률적인 특성과 그에 따른 한계는 여전히 남아있습니다. &quot;Sources of Hallucination by Large Language Modles on Inference Tasks&quot;라는 논문에서는 환각의 원인을 크게 두 가지로 보는데, 바로 '진실성 편향(veracity prior, 그럴듯하면 사실이라고 믿는 경향)'과 '상대적 빈도 휴리스틱(relative frequency heuristic, 자주 본 것을 사실이라고 믿는 경향)'라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 환각 현상을 측정하려면 통계적 측정 지표와 모델 기반 측정 지표를 조합하여 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;통계적 지표 (Statistical Metrics)&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;ROUGE(루지), BLEU(블루): 생성한 텍스트와 원본 텍스트 사이의 유사도를 평가하는 가장 일반적인 지표입니다. 주로 내재적 환각을 잡아내는 데 초점을 맞춥니다.&lt;/li&gt;
&lt;li&gt;PARENT(패런트), Knowledge F1: 구조화된 지식 출처(예: 표)가 있을 때 사용하는 지표입니다. 이러한 지표들은 효과적이긴 하지만, 문법적, 의미적인 미묘한 차이를 잡아내는 데는 한계가 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;모델 기반 지표 (Model-Based Metrics)&lt;/b&gt;&lt;/p&gt;
&lt;p 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;AI&amp;nbsp;모델을&amp;nbsp;'평가자'로&amp;nbsp;사용하는&amp;nbsp;방식이&amp;nbsp;바로&amp;nbsp;모델&amp;nbsp;기반&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;IE 기반 지표 (IE-Based Metrics): IE는 '정보 추출(Information Extraction)'의 약자입니다. 이 방식은 먼저 정보 추출 모델을 사용하여, 생성된 텍스트와 원본 텍스트에 담긴 핵심 지식을 '(주어, 동사, 목적어)'와 같은 간단한 '관계 튜플(relational tuples)'로 각각 추출합니다. 그 후, 이 두 튜플 집합을 비교하여 얼마나 일치하는지를 평가하는 것입니다.&lt;/li&gt;
&lt;li&gt;QA 기반 지표 (QA-Based Metrics): QA는 '질의응답(Question-Answering)'의 약자에요. 이 방식은 생성된 텍스트를 바탕으로 여러 질문을 만들고, 원본 텍스트를 참고하여 그 질문에 답하게 합니다. 생성된 답변과 원본 텍스트의 답변이 얼마나 일치하는지를 통해 환각 여부를 판단하는 질의응답 프레임워크를 사용합니다.&lt;/li&gt;
&lt;li&gt;NLI 기반 지표 (NLI-Based Metrics): NLI는 '자연어 추론(Natural Language Inference)'의 약자로, 이 방식은 NLI 데이터셋을 사용하여, 주어진 '전제(premise, 원본 텍스트)'를 바탕으로 생성된 '가설(hypothesis, 생성된 텍스트)'이 참인지 거짓인지를 평가합니다.&lt;/li&gt;
&lt;li&gt;충실도 분류 지표 (Faithfulness Classification Metrics): 이 방식은 특정 작업에 맞는 데이터셋을 직접 만들어, 더 미묘한 차이까지 평가하는 정교한 평가 기법입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 자동화된 지표들이 발전했음에도 불구하고, 환각 현상을 가장 정확하게 판단하는 방법은 여전히 인간의 판단(human judgment)입니다. 여기에는 주로 두 가지 방법론이 있어요.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;점수 매기기 (Scoring): 사람이 직접 LLM이 생성한 결과물을 보고, 정해진 척도(예: 1점부터 5점까지)에 따라 환각의 수준을 평가하여 점수를 매기는 방식입니다.&lt;/li&gt;
&lt;li&gt;비교 분석 (Comparative Analysis): 생성된 결과물을 기준이 되는 원본이나 정답과 비교하여 평가하는, 더 주관적인 평가 방식입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;최근에는 FactScore와 같은 새로운 지표도 등장했습니다. 이 지표는 LLM이 생성한 긴 글을 atomic facts라는 아주 작은 단위로 나눈 뒤, 각 사실이 원본 출처에 의해 뒷받침되는지를 하나하나 확인해 점수를 매기는 방식입니다.&lt;/span&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;프롬프트 엔지니어링 및 메타프롬프트 설계: 다음 섹션에서 살펴볼 '검색 증강 생성(Retrieval Augmented Generation, RAG)'과 같은 기술을 이용하면 환각을 직접적으로 해결하는 데 도움을 줄 수 있습니다.&lt;/li&gt;
&lt;li&gt;환각 완화를 위한 모델 선택 및 구성: 예를 들어, 더 큰 모델을 사용하고 온도 파라미터를 낮게 설정하면 환각이 줄어드는 경향이 있습니다. 또한, 우리가 앞서 배운 RLHF나 특정 분야 데이터로 파인튜닝하는 것 역시 환각을 줄이는 방법입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B.&amp;nbsp;프롬프트&amp;nbsp;디자인&amp;nbsp;및&amp;nbsp;엔지니어링&amp;nbsp;(Prompt&amp;nbsp;Design&amp;nbsp;and&amp;nbsp;Engineering)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 '프롬프트(prompt)'란 무엇일까요? 프롬프트는 생성형 AI 모델의 결과물을 유도하기 위해 사용자가 제공하는 텍스트 입력입니다. 단순한 질문부터 아주 상세한 설명이나 구체적인 작업 지시까지 다양하죠. 프롬프트는 대체로 지시(instructions), 질문(questions), 입력 데이터(input data), 예시(examples)로 이루어져 있습니다. 이 중에서 모델이 원하는 답변을 하도록 유도하기 위해서는 '지시' 또는 '질문'을 반드시 포함해야 합니다. 나머지 요소들은 선택적으로 사용하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프롬프트 엔지니어링은 LLM과 같은 생성형 AI 모델과 상호작용하여 원하는 결과물을 만들어가기 위해 꼭 필요한 분야입니다.&lt;/b&gt; 빠르게 발전하고 있는 분야죠. 프롬프트 엔지니어링의 본질은 최적 프롬프트를 만드는 것에 있습니다. 단순히 모델에게 지시하는 것을 넘어, 모델의 능력과 한계, 그리고 모델이 작동하는 맥락에 대해서도 어느 정도 이해를 해야 하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프롬프트 엔지니어링은 단순히 프롬프트를 구성하는 것을 넘어섭니다. 여기에는 해당 분야의 전문 지식(domain knowledge), AI 모델에 대한 이해, 그리고 다양한 맥락에 맞게 프롬프트를 조정하는 체계적인 접근법이 모두 필요합니다. 또한, '템플릿(templates)'을 만드는 것도 프롬프트 엔지니어링에 해당합니다. 예를 들어, 사용자 데이터에 기반한 개인화된 응답을 생성해야 한다고 해봅시다. 이때 &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;이어서 가장 대중적인 프롬프트 엔지니어링 기술들을 자세히 알아보겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1)&amp;nbsp;생각의&amp;nbsp;연쇄&amp;nbsp;(Chain&amp;nbsp;of&amp;nbsp;Thought,&amp;nbsp;CoT)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각의 연쇄(Chain of Thought, CoT) 기법은 구글 연구원들의 논문 &quot;Chain-of-Thought Prompting Elicits Reasoning in Large Language Models&quot;에서 처음 등장한 개념입니다. CoT는 &lt;b&gt;'LLM은 다음 토큰을 예측하는 데는 능숙하지만, 단계별 추론을 하도록 설계되지는 않았다'&lt;/b&gt;는 점에 유념한 기법입니다. 즉, &lt;b&gt;CoT는 LLM이 정답을 바로 내놓게 하는 대신, 정답에 도달하기까지의 '생각하는 과정'을 단계별로 보여주도록 유도하는 방식입니다. &lt;/b&gt;추론 과정을 명시적(explicit)으로 설명하도록 만드는 거죠. 그러면 모델이 더 논리적이고 합리적인 결과물을 출력할 수 있게 됩니다. 이것은 마치 우리가 수학 문제를 풀 때, 답만 덜렁 쓰는 것이 아니라 '풀이 과정'을 함께 적는 것과 같아요. 풀이 과정을 단계별로 적다 보면, 중간에 실수를 하더라도 발견하기 쉽고, 더 논리적으로 정답에 도달할 수 있죠. CoT는 LLM에게 바로 이 '풀이 과정'을 쓰게 만드는 기술이라고 보면 돼요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CoT 프롬프팅의 주요 형태 다음과 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;제로샷 CoT (Zero-Shot CoT)&lt;/b&gt;: LLM에게 &quot;단계별로 생각해봐(think step by step)&quot;라고 지시하는 CoT 방식입니다. 모델이 스스로 문제를 분해하고 추론의 각 단계를 명확히 표현하도록 유도하는 프롬프팅 방법이죠.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수동&amp;nbsp;CoT&amp;nbsp;(Manual&amp;nbsp;CoT)&lt;/b&gt;: 단계별 추론 과정을 예시로 모델에게 보여주는 CoT 방식입니다. 이 방식이 더 효과적인 결과를 낳지만, 일일이 예시를 수작업으로 입력해줘야 하므로 그만큼 어려움이 있습니다. 게다가 추론 과정 예시를 입력하는 과정에서 오류가 생기기도 쉽습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동 CoT(automatic CoT)&lt;/b&gt;: 수동 CoT의 한계(수작업으로 예시를 입력해야 하니, 시간도 오래 걸리고 오류가 발생할 가능성도 높다는 문제)를 해결하기 위해 등장한 CoT 방식입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2)&amp;nbsp;생각의&amp;nbsp;나무&amp;nbsp;(Tree&amp;nbsp;of&amp;nbsp;Thought,&amp;nbsp;ToT)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 주요 프롬프트 기법인 생각의 나무(Tree of Thought, ToT)로 넘어가 보겠습니다. &lt;b&gt;ToT는 사람들이 가장 그럴듯한 결론에 도달하기 전에, 다른 여러 해결책이나 추론 과정을 고려하는 방식에서 영감을 받았습니다. LLM이 하나의 '생각의 연쇄'를 따라가는 대신, 여러 개의 '생각의 나무'로 가지(branch)를 뻗어 나가도록 유도하는 방식이죠.&lt;/b&gt; 여기서 각 가지(branch)는 문제를 해결하는 각기 다른 추론 경로(사고방식)를 나타내요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ToT 기법에서 아주 중요한 부분은 바로 여러 추론 경로들을 평가하는 것입니다. &lt;b&gt;LLM은 여러 생각의 가지들을 생성하면서, 동시에 각 경로의 타당성과 관련성을 평가합니다. 이러한 실시간 분석과 비교 과정을 통해, 모델은 가장 일관성 있고 논리적인 최종 답변을 선택하게 되죠.&lt;/b&gt; ToT는 단일한 추론 경로만으로는 해결하기 어려운, 복잡한 문제에서 특히 유용합니다. 사람도 복잡한 문제를 해결할 때 다양한 가능성을 검토합니다. 마찬가지로 ToT 기법도, LLM이 (결론에 도달하기 전에 다양한 가능성을 고려하는) 인간의 문제 해결 방식을 모방하도록 합니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3)&amp;nbsp;자기-일관성&amp;nbsp;(Self-Consistency)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 살펴볼 프롬프팅 기법은 자기-일관성(Self-Consistency)입니다. &lt;b&gt;자기-일관성 기법은, LLM에게 같은 질문을 여러 번 던져서 여러 개의 다른 답변을 얻어낸 뒤, 그 중 가장 많은 답변을 최종 답변으로 선택하는 앙상블 기반의 방법입니다.&lt;/b&gt; 일종의 '집단 지성'을 활용하는 방법이에요. 구체적인 작동 방식은 이렇습니다. 먼저, CoT 프롬프팅을 사용해 모델이 여러 개의 다양한 추론 과정을 생성하도록 합니다. 그 후, 생성된 여러 결과물들 중에서 다수결의 원칙에 따라 가장 많이 등장한 답변을 최종 답변으로 선택합니다. 하나의 답변만 보는 것보다 훨씬 더 안정적이고 정확한 결과를 얻게 해주는 방식이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM이 생성한 여러 답변들 사이의 일관성을 측정하는 구체적인 방법들에는 여러 가지가 있습니다. 가장 일반적인 방법은 답변들 사이의 내용이 얼마나 겹치는지(overlap)를 분석하는 것입니다. 다른 방법으로는, 단순히 단어가 겹치는 것을 넘어 의미가 얼마나 비슷한지를 비교(semantic similarity)하거나, BERT-score나 n-gram 중복도와 같은 더 정교한 기술을 사용하는 방법이 있습니다. 이러한 측정 방법들은 LLM이 생성한 답변들이 서로 얼마나 일치하는지를 수치화(quantifying)해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기-일관성 기법은 정보의 진실성이 중요한 분야에서 주로 활용됩니다. 사실 확인(fact-checking)을 해야 할 때 특히 중요하죠. 자기-일관성 기법을 잘 활용하면 LLM의 신뢰도를 향상할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4)&amp;nbsp;리플렉션&amp;nbsp;(Reflection)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 살펴볼 프롬프팅 기법은 리플렉션(Reflection)입니다. &lt;b&gt;리플렉션은 LLM이 자신의 결과물을 스스로 평가해서 수정하도록 유도하는 방법입니다.&lt;/b&gt; 일종의 자기-평가(self-evaluation)를 하는 것이죠. 조금 더 구체적으로 말하면 모델이 초기 답변을 생성한 후, 그 답변이 사실에 맞는지, 논리적으로 일관성이 있는지, 질문과 관련이 있는지를 스스로 '돌아보도록(reflect)' 프롬프트를 주는 기법이 바로 리플렉션 기법입니다. 이러한 자기 성찰 과정을 통해, 모델은 스스로 잠재적인 오류나 개선점을 찾아낼 수 있습니다. '생성(generation) &amp;rarr; 성찰(reflection) &amp;rarr; 수정(revision)'이라는 반복적인 과정을 통해 답변의 품질과 신뢰도를 높이는 거에요. 즉, 모델에게 '네가 쓴 답을 다시 한번 읽어보고 이상한 점은 없는지 확인해봐'라고 시키는 것과 같습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5) 전문가 프롬프팅 (Expert Prompting)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 살펴볼 프롬프팅 기법은 바로 전문가 프롬프팅(Expert Prompting)입니다. &lt;b&gt;LLM이 다양한 분야의 전문가 역할을 시뮬레이션하도록 유도해 답변의 품질을 높이는 방법이죠.&lt;/b&gt; 프롬프트에 '너는 30년 경력의 경제학자야' 또는 '너는 셰익스피어 전문가야'와 같이 특정 전문가의 역할(persona)을 부여하면, 모델은 그에 맞는 톤과 깊이 있는 지식을 바탕으로 답변을 생성합니다. 여기서 한 단계 더 나아간 전략이 바로 다중 전문가(multi-expert) 접근법입니다. 이 방식은 LLM에게 여러 전문가의 관점에서 답변을 고려하게 한 뒤, 그 답변들을 종합하여 더 포괄적이고 균형 잡힌 최종 답변을 만들도록 합니다. 예를 들어, '새로운 스마트폰을 출시하는 전략'에 대해 질문할 때, '마케팅 전문가', '엔지니어', '디자이너'의 관점을 각각 물어보고 그 의견들을 종합하여 최종 결론을 내리는 것과 같아요. 이를 통해 한 가지 관점에 치우치지 않고, 더 깊이 있고 균형 잡힌 답변을 얻을 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6)&amp;nbsp;체인&amp;nbsp;(Chains)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;체인 방식은 복잡한 작업을 처리하기 위해 여러 구성 요소를 차례로 연결하는 방법입니다.&lt;/b&gt; 각각의 구성 요소가 특정 기능을 수행하고, 한 구성 요소의 결과물(output)이 다음 구성 요소의 입력(input)이 되는 워크플로우를 구축하는 거라고 보면 됩니다. 이러한 end-to-end 방식에서는 각 단계를 특정 작업에 맞게 조정할 수 있으므로, 더 복잡하고 미묘한 처리를 가능하게 합니다. 마치 '자동차 공장의 조립 라인'과 같아요. 첫 번째 라인에서 차체를 만들면, 그 결과물이 두 번째 라인으로 넘겨 여기에 엔진을 달고, 다시 세 번째 라인으로 전달해 도색을 하는(최종 정리) 것과 같죠. 이처럼 LLM 호출을 순서대로 연결하여 하나의 복잡한 작업을 완료하는 것이죠. 체인을 설계하는 것은 복잡하기 때문에, 'PromptChainer'와 같은 시각화 도구가 개발되기도 했습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7)&amp;nbsp;레일&amp;nbsp;(Rails)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 기법은 레일(Rails)로, 미리 정의한 규칙이나 템플릿을 통해 LLM의 결과물이 특정 방향에 맞게 나오도록 제어하는 방법입니다.&lt;/b&gt; 모델의 응답이 특정 기준을 따르도록 보장하는 기법이죠. 그 결과 응답의 정확성, 안전성, 관련성을 향상할 수 있습니다. LLM이 응답을 생성할 때 준수해야 할 할 '가이드라인'을 설정하는 것이 선행되어야 합니다. 기차가 '레일' 위로만 달릴 수 있듯이, LLM의 답변이 우리가 정해놓은 '안전한 길'을 벗어나지 않도록 제어하는 장치라고 생각하시면 됩니다. 레일은 목적에 따라 다양하게 설계할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;토픽 레일 (Topical Rails)&lt;/b&gt;: LLM이 특정 주제나 영역을 벗어나지 않도록 보장하는 레일 기법입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사실 확인 레일 (Fact-Checking Rails)&lt;/b&gt;: 거짓되거나 오해의 소지가 있는 정보의 생성을 최소화하는 것을 목표로 하는 기법입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;탈옥 방지 레일 (Jailbreaking Rails)&lt;/b&gt;: LLM이 자체 운영 제약이나 가이드라인을 우회하려는 응답을 생성하는 것을 방지하는 기법입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8) 자동 프롬프트 엔지니어링 (Automatic Prompt Engineering, APE)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 우리는 '어떻게 하면 더 좋은 프롬프트를 만들까?'를 고민했습니다. 그런데 자동 프롬프트 엔지니어링(&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Automatic Prompt Engineering,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;APE)은 여기서 한 발 더 나아가, &quot;프롬프트 자체를 LLM이 만들게 하면 어떨까?&quot;라는 똑똑한 아이디어를 제시합니다. &lt;b&gt;자동 프롬프트 엔지니어링은 LLM을 자기-참조적(self-referential)으로 사용해, 프롬프트 설계 과정을 자동화하고 최적화하는 데 초점을 맞춥니다. 즉, 모델을 이용해서 프롬프트를 생성하고, 점수를 매기고, 다시 개선하는 과정을 반복하는 겁니다.&lt;/b&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;b&gt;프롬프트 생성 (Prompt Generation)&lt;/b&gt;: 주어진 작업이나 목표에 따라, LLM이 다양한 프롬프트 후보들을 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프롬프트 채점 (Prompt Scoring)&lt;/b&gt;: 생성한 각각의 프롬프트가 얼마나 효과적인지를 평가합니다. 이때 평가 기준은 '명확성', '구체성', 그리고 '원하는 답변을 이끌어낼 가능성' 등이 될 수 있죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개선 및 반복 (Refinement and Iteration)&lt;/b&gt;: 이 평가 점수를 바탕으로 프롬프트는 고품질로 개선되며, 이 과정은 계속해서 반복됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 '프롬프트 엔지니어링'에 대한 긴 여정을 마쳤습니다. 우리는 LLM의 능력을 최대한 끌어내기 위한 다양한 '질문의 기술'들을 배웠습니다. LLM에게 생각하는 과정을 쓰게 하는 CoT부터, 여러 가능성을 탐색하는 ToT, 다수결로 답을 찾는 자기-일관성, 스스로 답을 검토하게 하는 리플렉션, 전문가 역할을 부여하는 전문가 프롬프팅, 여러 단계를 연결하는 체인, 답변의 가이드라인을 정하는 레일, 그리고 프롬프트 자체를 만들게 하는 APE까지, 아주 다양하고 흥미로운 기법들을 살펴보았죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 LLM의 성능을 끌어올리기 위한 또 다른 강력한 방법으로 넘어가 보겠습니다. 지금까지가 LLM에게 '질문을 잘하는 법'을 가르치는 것이었다면, 다음 단계는 LLM에게 '오픈북 시험을 보는 법'을 가르치는 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;C.&amp;nbsp;외부&amp;nbsp;지식을&amp;nbsp;통해&amp;nbsp;LLM&amp;nbsp;증강하기&amp;nbsp;-&amp;nbsp;RAG&amp;nbsp;(Augmenting&amp;nbsp;LLMs&amp;nbsp;through&amp;nbsp;external&amp;nbsp;knowledge&amp;nbsp;-&amp;nbsp;RAG)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전 훈련된 LLM의 단점 중 하나는 최신 정보나 비공개 정보에 접근할 수 없다는 점입니다. 이 문제를 해결하기 위해 등장한 기술이 바로 RAG(Retrieval Augmented Generation, 검색 증강 생성)입니다. RAG의 작동 방식은 아래 그림과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZC5K0/btsPNIn2140/O7DLxK3BdR9aKke5O6SzxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZC5K0/btsPNIn2140/O7DLxK3BdR9aKke5O6SzxK/img.png&quot; data-alt=&quot;질의 응답 LLM에 RAG를 적용한 예시 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZC5K0/btsPNIn2140/O7DLxK3BdR9aKke5O6SzxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZC5K0%2FbtsPNIn2140%2FO7DLxK3BdR9aKke5O6SzxK%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;1173&quot; height=&quot;673&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;673&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;질의 응답 LLM에 RAG를 적용한 예시 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;먼저,&amp;nbsp;사용자의&amp;nbsp;프롬프트에서&amp;nbsp;검색할&amp;nbsp;'쿼리(query)'를&amp;nbsp;추출합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;그다음, 이 쿼리를 사용해 외부 지식 출처(예: 검색 엔진, 회사 내부 데이터베이스 등)에서 관련 정보를 '검색(retrieve)'합니다.&lt;/li&gt;
&lt;li&gt;이렇게 검색해온 관련 정보를 원래 프롬프트에 추가하여 LLM에게 전달하면, LLM은 이 정보를 참고해 최종 답변을 '생성(generate)'합니다. 최종 답변을 '증강(augmente)'하는 과정이죠.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'오픈북 시험'과 같은 원리입니다. 보다시피 RAG 시스템은 검색(Retrieval), 생성(Generation), 증강(Augmentation)이라는 세 가지 요소로 이루어져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;RAG-인식 프롬프트 기법 (RAG-aware prompting techniques)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAG가 워낙 중요한 기술이다 보니, RAG를 더 효과적으로 사용하기 위한 특별한 프롬프트 기법들도 개발되었습니다. 그중 하나가 바로 FLARE(&lt;b&gt;F&lt;/b&gt;orward-&lt;b&gt;l&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;ooking&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;A&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;ctive&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;R&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;etrieval&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;E&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;nhanced&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;G&lt;/b&gt;eneration, 미래 예측 능동 검색 증강 생성)입니다. &lt;b&gt;기존의 RAG는 답변을 생성하기 전에, 처음 프롬프트 질문을 기반으로만 딱 한 번 검색합니다. 이와 달리 FLARE(플레어)는 답변을 생성하는 도중에 모델이 '앞으로 필요한 정보'를 미리 예측해서 검색을 수행하는 과정을 반복(즉, 예측과 정보 검색을 반복)하며, 이러한 정보를 결합하는 방식입니다.&lt;/b&gt; 덕분에 답변의 정확성과 관련성이 높아집니다. FLARE의 작동 방식은 이렇습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;미래 정보 필요성 예측&lt;/b&gt;: 답변을 생성하는 과정에서 모델이 '앞으로 어떤 정보가 필요할지'를 예측합니다. 이때 추가적인 검색이 필요한지 평가를 합니다. 다음 토큰의 최대 확률이 특정 임계값 이하라면 다음 내용을 이어서 생성하기 전에 검색을 해야겠다는 결정을 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;능동적 검색&lt;/b&gt;: 검색 조건이 충족되면, 예측한 필요 정보를 바탕으로 외부 검색 시스템이나 벡터 DB에서 정보를 검색을 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;재생성/정제&lt;/b&gt;: 찾아낸 정확한 정보를 프롬프트에 주입(context injection)해서 원래 쓰려던 문장을 이어서 작성하거나 더 정확하게 다듬습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FLARE는 바로 이 과정을 답변 생성이 끝날 때까지 계속 반복하여, 문장 하나하나를 가장 최신의 정확한 정보로 채워나가는 동적인 방식입니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;D.&amp;nbsp;외부&amp;nbsp;도구&amp;nbsp;사용하기&amp;nbsp;(Using&amp;nbsp;External&amp;nbsp;Tools)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 외부 도구를 활용하는 방법을 알아보겠습니다. 사실 방금 다룬 RAG, 즉 외부 지식 출처에서 '검색'하는 것도 '도구'를 사용하는 것의 한 종류라고 할 수 있습니다. 이 섹션에서는 그 개념을 더 넓게 확장합니다. 여기서 말하는 도구(Tools)란 LLM이 활용할 수 있는 외부의 서비스를 의미합니다. 이러한 도구들 덕분에 LLM이 수행할 수 있는 작업의 범위가 넓어졌습니다. 단순한 정보 검색을 넘어, 외부 데이터베이스나 API와의 복잡한 상호작용까지 할 수 있기 때문이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 도구를 사용하는 것을 넘어, &quot;Toolformer: Language Models Can Teach Themselves to Use Tools&quot;라는 논문에서는 LLM이 언제, 어떤 도구를, 어떤 파라미터로 사용해야 할지 스스로 결정하도록 훈련시키는 방법을 보여주었습니다. 예를 들어, 질문을 보고 '아, 이건 계산이 필요하니 계산기 API를 호출해야겠다' 또는 '이건 최신 정보가 필요하니 검색 엔진 API를 호출해야겠다'라고 스스로 판단하고 행동하는 거죠. 최근에는 버클리 대학의 연구진이, 스스로 API를 사용하도록 훈련된 Gorilla(고릴라)라는 새로운 LLM을 개발했습니다. Gorilla는 GPT-4보다 더 나은 성능을 보여주기도 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;도구-인식 프롬프트 기법 (Tool-aware prompting techniques)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAG에서 다뤘던 것과 유사하게 여기서도 도구-인식 프롬프트 기법이 있습니다. 여러 도구-인식 프롬프트 기법들이 있는데 대표적인 기법으로는 ART(&lt;b&gt;A&lt;/b&gt;utomatic Multi-step &lt;b&gt;R&lt;/b&gt;easoning and &lt;b&gt;T&lt;/b&gt;ool-use, 자동 다단계 추론 및 도구 사용)가 있습니다. &lt;b&gt;ART는 앞서 다룬 '자동 CoT(자동 생각의 연쇄)' 프롬프팅과 '외부 도구 사용'을 결합한 기법입니다.&lt;/b&gt; 작동 방식은 이렇습니다. 먼저 주어진 작업과 입력에 대해, 시스템은 '작업 라이브러리(task library)'에서 유사한 과거의 작업 사례들을 찾습니다. 그다음, 이 과거 사례들을 프롬프트의 '예시'로 사용하여, LLM이 현재 작업을 어떻게 접근하고 실행해야 할지 안내합니다. 신입사원(LLM)에게 복잡한 업무(현재 작업)를 시킬 때, 이전에 비슷한 업무를 처리했던 선배사원의 '업무 일지'(유사한 과거 작업 사례)를 참고 자료로 함께 주는 것과 같아요. 신입사원은 그 업무 일지를 보고 '아, 이런 문제는 먼저 A 프로그램을 돌리고, 거기서 나온 결과를 B 데이터베이스에서 확인하면 되는구나' 하고 일의 순서와 도구 사용법을 배우게 됩니다. 이 방법은 '내부적인 추론'과 '외부 데이터 처리/검색'의 조합이 필요한 작업에 특히 효과적입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;E.&amp;nbsp;LLM&amp;nbsp;에이전트&amp;nbsp;(LLM&amp;nbsp;Agents)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4장의 마지막 주제이자, 지금까지 배운 모든 증강 기술의 집합체라고 할 수 있는 LLM 에이전트에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 'AI 에이전트'라는 개념 자체는 AI 분야에서 오랫동안 탐구해온 아이디어입니다. 에이전트란 일반적으로 센서를 통해 환경을 인식하고, 현재 상태를 바탕으로 판단을 내리며, 그에 따라 행동하는 자율적인 실체를 의미합니다. &lt;b&gt;LLM의 맥락에서, 에이전트란 특정 작업을 자율적으로 수행할 수 있는, 특별하게 구현된 (증강된) LLM 기반 시스템을 의미합니다.&lt;/b&gt; &lt;b&gt;이 에이전트들은 사용자의 의도에 맞는 행동을 하기 위해, 사용자 및 환경과 상호작용하도록 설계되었습니다.&amp;nbsp;&lt;/b&gt;에이전트는 도구를 사용하고, 주어진 입력을 바탕으로 결정을 내리는 능력을 갖춘 LLM에 기반을 둡니다. 단순한 응답 생성을 넘어서는 수준의 자율성과 의사결정이 필요한 작업을 처리하도록 설계되었죠. 일반적인 LLM 기반 에이전트의 기능은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;도구 접근 및 활용 (Tool Access and Utilization)&lt;/b&gt;: 에이전트는 작업을 완수하기 위해, 외부 도구와 서비스에 접근하여 이러한 자원을 효과적으로 활용하는 능력을 가지고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의사 결정 (Decision Making)&lt;/b&gt;: 에이전트는 입력, 맥락, 그리고 외부 도구들을 바탕으로, 복잡한 추론 과정을 거쳐 결정을 내릴 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어보죠. LLM이 날씨 API에 접근할 수 있다면, 특정 장소의 날씨와 관련한 어떤 질문에도 답할 수 있습니다. 즉, API를 사용해 문제를 해결할 수 있는 것이죠. 더 나아가 만약 그 LLM이 구매를 할 수 있는 API에 접근할 수 있다면, 외부 세계의 정보를 읽을 뿐만 아니라 그에 따라 행동까지 할 수 있는 '구매 에이전트'를 만들 수도 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림은 '대화형 정보 탐색'을 위한 LLM 기반 에이전트의 예시입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TplaC/btsPPnDFmzQ/O8NHfP5mAMtD0xj4IykhaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TplaC/btsPPnDFmzQ/O8NHfP5mAMtD0xj4IykhaK/img.png&quot; data-alt=&quot;'대화형 정보 탐색'을 위한 LLM 기빈의 에이전트 예시 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TplaC/btsPPnDFmzQ/O8NHfP5mAMtD0xj4IykhaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTplaC%2FbtsPPnDFmzQ%2FO8NHfP5mAMtD0xj4IykhaK%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;650&quot; height=&quot;272&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'대화형 정보 탐색'을 위한 LLM 기빈의 에이전트 예시 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&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;작업 기억(Working Memory): 대화의 상태를 추적하는 모듈&amp;nbsp;&lt;/li&gt;
&lt;li&gt;정책(Policy):&amp;nbsp;작업&amp;nbsp;실행&amp;nbsp;계획을&amp;nbsp;세우고&amp;nbsp;다음&amp;nbsp;시스템&amp;nbsp;행동을&amp;nbsp;선택하는 모듈.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;행동 실행기(Action Executor): 정책이 선택한 행동을 수행하는 모듈(외부 지식을 결합하거나, LLM에게 응답을 생성하도록 프롬프팅).&lt;/li&gt;
&lt;li&gt;유틸리티(Utility): LLM 응답이 사용자의 기대나 특정 비즈니스 요구사항과 얼마나 일치하는지를 평가하고, 에이전트 성능을 개선하기 위한 피드백을 생성하는 모듈&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;에이전트를&amp;nbsp;위한&amp;nbsp;프롬프트&amp;nbsp;엔지니어링&amp;nbsp;기법&amp;nbsp;(Prompt&amp;nbsp;engineering&amp;nbsp;techniques&amp;nbsp;for&amp;nbsp;agents)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAG나 외부 도구 사용과 마찬가지로, LLM 기반 에이전트에 맞춰 특별히 개발한 프롬프트 엔지니어링 기법들도 있습니다. 여기서는 그 세 가지 예시인 ReWOO, ReAct, DERA에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫&amp;nbsp;번째&amp;nbsp;기법은&amp;nbsp;ReWOO(리우),&amp;nbsp;즉&amp;nbsp;'&lt;b&gt;Re&lt;/b&gt;asoning&amp;nbsp;&lt;b&gt;w&lt;/b&gt;ithout&amp;nbsp;&lt;b&gt;O&lt;/b&gt;bservation(관찰 없는 추론)'입니다. 이 기법은 추론 과정과 외부 데이터 사용(관찰)을 분리하는 것을 목표로 하는 기법입니다. &lt;b&gt;ReWOO는 LLM이 외부 데이터나 도구에 즉시 의존하지 않고도, 포괄적인 추론 계획(reasoning plans)이나 메타-플랜(meta-plans)을 먼저 수립하도록 합니다.&lt;/b&gt; 즉, '계획 세우기' 단계와 '계획 실행하기' 단계를 명확하게 나누는 것이죠. ReWOO에서, LLM은 처음에 주어진 문제를 어떻게 접근하고 해결할지 계획(일련의 단계)을 세웁니다. 이 메타-플래닝 단계 덕분에 정보가 확보된 뒤에는 에이전트가 이를 더 효과적으로 처리할 수 있는 것입니다. 그런 다음 실행 단계에서는 실제 데이터나 관찰 결과를 미리 세운 계획과 결합합니다. 그 결과, 일관성 있고 관련성 높은 응답을 이끌어낼 수 있습니다. 이 방식은 효율적이며, 중간에 도구를 사용하지 못하더라도 더 강건하게 대처할 수 있다는 상당한 이점이 있습니다. 데이터 검색이 어렵거나, 느리거나, 불확실한 상황에서 특히 유리한 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 기법은 ReAct(리액트), 즉, '&lt;b&gt;Re&lt;/b&gt;ason and &lt;b&gt;Act&lt;/b&gt;(추론과 행동)'입니다. &lt;b&gt;LLM이 단순히 언어 추론만 하는 것이 아니라, 행동까지 함께 생성하도록 유도해, 모델의 동적인 문제 해결 능력을 향상하는 방식이죠. 즉, ReAct는 추론(reasoning)과 행동(acting)을 통합하려는 기법이에요.&lt;/b&gt; ReAct 프롬프팅을 통해 LLM은 추론(설명)을 하는 것과 행동(단계나 명령어)을 취하는 것을 번갈아 가며 수행하게 됩니다. 그로 인해 모델은 문제에 대해 동적으로 추론하고, 동시에 구체적인 행동을 제안하고 실행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 기법은 DERA(데라), 즉 '&lt;b&gt;D&lt;/b&gt;ialog-&lt;b&gt;E&lt;/b&gt;nabled &lt;b&gt;R&lt;/b&gt;esolving &lt;b&gt;A&lt;/b&gt;gents(대화형 해결 에이전트)'입니다. &lt;b&gt;이름처럼 대화를 하며, 질문에 대한 답을 하고, 상호작용을 통해 결정을 내릴 수 있는 전문화된 AI 에이전트입니다.&lt;/b&gt; DERA의 핵심 아이디어는, 대화를 할 때 여러 명의 에이전트를 활용하는 것입니다. 각 에이전트는 특정 역할과 기능을 가지고 있죠. 이를테면, 정보를 수집하고 분석하는 '연구원(Researcher)' 에이전트와, 제공된 정보를 바탕으로 최종 판단을 하는 '결정자(Decider)' 에이전트를 둘 수 있습니다. 이렇게 역할을 나누면 더 체계적이고 효율적으로 문제를 해결하고 의사결정을 내릴 수 있습니다. DERA는 의료 진단이나 고객 서비스와 같이 의사결정을 복잡하게 해야 하는 상황에 특히 유용합니다. 이러한 협력적인 특성 덕분에, DERA 에이전트들은 단일 에이전트 시스템이 어려워하는 복잡한 질문들을 더 확실하게 처리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 LLM을 '어떻게 사용하고 증강하는지'에 대한 4장을 모두 끝냈습니다. LLM의 한계, 그 한계를 극복하기 위한 다양한 프롬프트 엔지니어링 기법들, 외부 지식을 활용하는 RAG, 외부 도구를 사용하는 방법, 그리고 이 모든 것을 종합하여 스스로 행동하는 LLM 에이전트에 이르기까지 LLM의 활용법을 깊이 있게 살펴보았네요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;V. LLM을 위한 인기 있는 데이터셋 (POPULAR DATASETS FOR LLMS)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM이 굉장한 성과를 보여주고 있지만, '과연 얼마나 효과적으로 작동하는가?' 그리고 '특정 작업에서 그 성능을 어떻게 평가할 수 있는가?'라는 중요한 질문이 뒤따를 수밖에 없습니다. LLM의 평가가 특히 어려운 이유는, LLM을 적용하는 분야가 계속해서 확장되고 있기 때문입니다. 원래 LLM은 번역, 요약, 질의응답과 같은 전통적인 자연어 처리(NLP) 작업의 성능을 높이기 위해 개발되었습니다. 하지만 오늘날에는 코드 생성이나 금융과 같은 아주 다양한 분야에서도 활용되고 있죠. 뿐만 아니라 LLM을 평가할 땐 단순히 성능만 보는 것이 아니라, 공정성과 편향, 진실성(사실성), 추론 능력과 같은 여러 중요한 사항을 다방면으로 고려해야 합니다. 이 장에서는 LLM을 평가하기 위해 일반적으로 사용되는 벤치마크 데이터셋을 소개할 것입니다. 논문에는 여러 데이터셋이 나오지만 모두 알 필요는 없다고 생각해, 중요한 벤치마크 데이터셋 몇 개만 추려 소개하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 기본 작업용 데이터셋 (Datasets for Basic Tasks)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;MMLU&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 살펴볼 데이터셋은 MMLU입니다. MMLU는 모델이 별도의 학습 예시 없이(제로샷, zero-shot) 또는 아주 적은 몇 개의 예시만 보고(퓨샷, few-shot) 새로운 문제를 얼마나 잘 푸는지 평가하기 위해 만들어진 데이터셋입니다. 즉, LLM이 가진 전반적인 지식 수준과 문제 해결 능력을 측정하는 것이 목표죠. MMLU는 STEM(과학, 기술, 공학, 수학), 인문학, 사회과학 등 무려 57개의 다양한 학문 분야를 다루고 있습니다. 이 벤치마크는 초급 수준부터 전문가 수준까지 다양한 데이터로 구성되어 있죠. 마치 초등학교 문제부터 대학원 수준의 전문직 시험까지 총망라한 거대한 'AI 수능 시험지'와 같습니다. 이 데이터셋은 다중 언어 이해(multi-task language understanding), 질의응답, 그리고 산술 추론 능력을 평가하는 데 기여를 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HumanEval&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HumanEval은 코드 생성(code generation) 작업을 위한 데이터셋입니다. 이 데이터셋은 사람이 직접 만든(hand-crafted) 164개의 프로그래밍 문제로 구성되어 있습니다. 각 문제에는 함수 시그니처, 주석 문자열(docstring), 코드 본문, 그리고 여러 개의 단위 테스트(unit tests)가 함께 제공됩니다. HumanEval을 개발할 때 가장 중요하게 생각했던 점은 일반적인 코드 생성 모델의&amp;nbsp; 훈련 데이터셋에 포함되지 않은 새로운 문제들로만 구성하는 것이었습니다. 따라서 HumanEval에서 높은 점수를 받았다는 것은, 모델이 정답을 '외워서' 푼 것이 아니라, 처음 보는 문제에 대해서도 '스스로 생각해서 논리적으로 코드를 짜는 능력'이 뛰어나다는 것을 반증합니다. 진정한 실력 테스트인 셈이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;SQUAD &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 살펴볼 데이터셋은 SQUAD(스쿼드)입니다. SQUAD는 &lt;b&gt;S&lt;/b&gt;tanford &lt;b&gt;Q&lt;/b&gt;uestion &lt;b&gt;A&lt;/b&gt;nswering &lt;b&gt;D&lt;/b&gt;ataset(스탠포드 질의응답 데이터셋)의 약자로, 크라우드소싱 방식으로 만들어진 독해 기반 질의응답 데이터셋입니다. SQUAD는 500개가 넘는 위키피디아 아티클에 연결된 약 10만 개의 질문-답변 쌍으로 구성되어 있습니다. 이 데이터셋의 가장 큰 특징은, 질문에 대한 답변이 해당 읽기 지문에서 그대로 가져온 텍스트의 일부(fragments)라는 점입니다. 또한, 어떤 질문들은 지문 안에 답이 없어서 '답할 수 없는(unanswerable)' 경우도 포함되어 있습니다. 데이터셋은 80%의 훈련 세트, 10%의 검증 세트, 그리고 10%의 비공개 테스트 세트로 나뉘어 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B.&amp;nbsp;창발적&amp;nbsp;능력용&amp;nbsp;데이터셋&amp;nbsp;(Datasets&amp;nbsp;for&amp;nbsp;Emergent&amp;nbsp;Abilities)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 LLM이 단순히 지식을 암기하는 것을 넘어, 추론하고, 상식을 이해하며, 진실을 구분하는 더 높은 수준의 능력을 평가하는 데이터셋들을 다룹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;GSM8K&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 GSM8K으로, 모델의 다단계 수학 추론(multi-step mathematical reasoning) 능력을 평가하기 위해 설계된 데이터셋입니다. GSM8K는 사람이 직접 작성한 8,500개의 초등학교 수준 수학 문제로 구성되어 있습니다. 이 문제들은 정답을 찾기 위해 2단계에서 8단계에 이르는 계산 과정이 필요하며, 주로 기본적인 사칙연산을 사용하고요. GSM8K가 중요한 이유는, LLM이 정답만 맞히는 것이 아니라 정답에 도달하기까지의 논리적인 '풀이 과정'을 생성하는 능력을 평가하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HellaSwag&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 알아볼 데이터셋은 HellaSwag(헬라스웨그)입니다. 이 벤치마크는 LLM의 상식 추론(commonsense reasoning) 능력을 평가하기 위해 설계되었으며, 7만 개의 객관식 문제로 구성되어 있습니다. 각 문제는 ActivityNet 또는 WikiHow라는 두 가지 출처에서 가져온 것인데, 특정 상황을 나타내는 문장을 주고 &quot;이 다음에 무슨 일이 일어날까?&quot;를 묻습니다. 그에 대한 선택지는 네 가지가 제공되고요. 정답 선택지는 실제로 다음에 일어나는 사건을 설명하지만, 나머지 세 개의 오답은 사람이 보기에는 어색하지만 기계가 통계적으로 그럴듯하다고 착각하기 쉽게 만들었습니다. 따라서 HellaSwag를 잘 푼다는 것은, 모델이 단순한 패턴 인식을 넘어 인간 수준의 진정한 상식을 갖추고 있다는 의미가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;TruthfulQA &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TruthfulQA 데이터셋은 질문에 대한 LLM 답변의 '진실성(truthfulness)'을 평가하기 위해 특별히 설계한 데이터셋입니다. 건강, 법률, 금융, 정치 등 38개의 다양한 분야에서 가져온 817개의 질문으로 구성되어 있죠. TruthfulQA의 가장 큰 특징은, 인간조차도 오해 때문에 틀린 답을 하기 쉽도록 의도적으로 질문이 설계되었다는 점입니다. 사람들이 흔히 가지고 있는 잘못된 통념이나 오해를 파고드는 '함정 질문'과 같아요. 곧, LLM이 인터넷에 떠도는 잘못된 정보를 학습해서 그대로 앵무새처럼 따라 하는지, 아니면 진실을 말하려고 노력하는지를 평가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'창발적 능력용 데이터셋'의 핵심적인 세 가지, 즉 단계별 수학 추론 능력을 보는 GSM8K, 상식을 테스트하는 HellaSwag, 모델의 진실성을 평가하는 TruthfulQA에 대해 모두 알아보았습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;C.&amp;nbsp;증강&amp;nbsp;능력용&amp;nbsp;(Datasets&amp;nbsp;for&amp;nbsp;Augmented&amp;nbsp;Abilities)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HotpotQA&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HotpotQA는 다양한 다단계 추론(multi-hop reasoning)을 위해 설계된 질의응답 데이터셋입니다. 영문 위키피디아에서 파생해 만든 데이터셋으로, 약 113,000개의 질문으로 구성되어 있죠. 이 데이터셋의 가장 큰 특징은 한 질문에 답하려면 두 개의 다른 위키피디아 문서에 있는 정보를 조합해야 한다는 점입니다. 또한, 데이터셋에는 정답을 찾는 데 필요한 핵심 문장들이 무엇인지 사람이 직접 표시한 목록도 함께 들어있습니다. 이를 통해 모델이 정답뿐만 아니라 '정답을 찾아가는 과정'까지 제대로 추론했는지 평가할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;VI. 주요 LLM들의 벤치마크 성능 (PROMINENT LLMS' PERFORMANCE ON BENCHMARKS)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 장에서는 LLM의 성능을 본격적으로 분석합니다. 우리가 어떤 LLM이 '더 좋다' 또는 '더 뛰어나다'라고 말하려면, 무엇을 기준으로 삼아야 할까요? 그리고 그 기준에 따라 실제로 LLM들은 어떤 성적표를 받았을까요? 바로 이 두 가지 큰 질문에 답하는 장이라고 할 수 있습니다. 먼저 'Popular Metrics for Evaluating LLMs' , 즉 LLM을 평가하기 위한 주요 지표(metric)들을 살펴보고, 이어서 'LLMs' Performance on Different Tasks', 즉 다양한 과제에서 LLM들이 실제로 어떤 성능을 보이는지 비교해보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. LLM을 평가하기 위한 대표적인 지표 (Popular Metrics for Evaluating LLMs)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 섹션에서는 LLM의 성능을 어떻게 평가하는지에 대한 기본적인 원칙을 설명하고 있어요. LLM이 수행하는 작업의 종류에 따라 평가하는 '잣대', 즉 평가지표가 달라진다는 점입니다. 예를 들어, 주어진 텍스트에 담긴 감정이 긍정적인지 부정적인지를 판단하는 '감성 분석' 같은 작업은, 여러 선택지 중 하나를 고르는 '분류(classification)' 문제와 같습니다. 이런 경우에는 우리가 이미 잘 알고 있는 전통적인 분류 모델의 평가지표를 그대로 사용합니다. 정확도(accuracy), 정밀도(precision), 재현율(recall), F1 점수(F1-score) 등이 바로 그것들이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 LLM의 진짜 능력은 소설을 쓰거나, 시를 짓거나, 긴 글을 요약하는 것처럼 정답이 없는 '순수한 개방형 텍스트 생성' 작업에서 드러납니다. 그런데 이런 작업들은 앞서 말한 분류 문제처럼 평가를 할 수가 없죠. 예컨대 '행복에&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;nbsp;결과물을&amp;nbsp;평가하기&amp;nbsp;위해서는&amp;nbsp;그&amp;nbsp;작업의&amp;nbsp;특정한&amp;nbsp;'목적'에&amp;nbsp;맞는&amp;nbsp;별도의&amp;nbsp;평가지표가&amp;nbsp;필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Pass@k&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 코드 생성(code generation)은 정답이 없는 '순수한 개방형 텍스트 생성' 작업과는 약간 다릅니다. 생성한 코드는 반드시 특정 기능 테스트를 통과해야 하기 때문이죠. 이와 더불어, 모델이 여러 가지 코드를 생성할 수 있을 때 그 중에서 정답 코드를 선택할 확률이 얼마나 되는지를 이해하는 것도 중요합니다. 이런 경우에 적합한 지표가 바로 Pass@k입니다. Pass@k는 다음과 같이 계산합니다.&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;기능 테스트를 통해 그중 c개가 정답임을 확인합니다.&lt;/li&gt;
&lt;li&gt;그 후, 생성된 n개의 코드 중에서 k개를 무작위로 뽑았을 때, 그 안에 정답이 하나 이상 포함될 확률을 계산합니다. 이 확률 값이 바로 Pass@k 점수가 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pass@k를 '보물찾기'에 비유해볼게요. LLM(탐험가)이 10개(n)의 보물 상자를 찾아왔습니다. 열어보니 그중 3개(c)에만 진짜 보물이 들어있었습니다. 이제 우리가 눈을 감고 5개(k)의 상자를 무작위로 골랐을 때, 그 안에 보물이 하나 이상 들어있을 확률이 바로 Pass@5 점수가 됩니다. 이 지표는 모델이 단순히 '정답을 하나 생성할 수 있는가?'를 넘어, '얼마나 안정적으로, 높은 확률로 정답을 생성하는가?'를 측정하는 더 정교한 방법입니다. Pass@k의 계산식은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9og6v/btsPOEzSPFa/sJBfnvGhLm7VWzvpmn6fEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9og6v/btsPOEzSPFa/sJBfnvGhLm7VWzvpmn6fEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9og6v/btsPOEzSPFa/sJBfnvGhLm7VWzvpmn6fEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9og6v%2FbtsPOEzSPFa%2FsJBfnvGhLm7VWzvpmn6fEK%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;350&quot; height=&quot;93&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식이 조금 복잡해 보이지만, 그 의미는 '전체 n개의 상자 중 k개를 뽑을 때, 보물이 없는 n-c개의 상자 중에서만 k개를 뽑을 확률(꽝을 뽑을 확률)'을 먼저 계산하고, 1에서 이 확률을 빼서, 적어도 하나 이상의 보물을 뽑을 확률을 구하는 것입니다. 그리고 이 확률을 모든 문제에 대해 평균(E) 내어 최종 점수를 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;EM (Exact Match, 정확한 일치)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 평가 지표로는 EM(Exact Match, 정확한 일치)이 있습니다. EM은 이름 그대로 (사전에 정의한) 정답과 정확히 일치하는지를 측정하는 지표입니다. 좀 더 정확히 말하면, 모델의 예측이 토큰 단위로 정확히 일치할 경우에만 정답으로 간주하는 지표죠. 어떤 경우에는 정확도(accuracy)와 동일한 의미로 사용될 수도 있습니다. EM은 아주 엄격한 '단답형 주관식 채점'과 같다고 볼 수 있습니다. 정답이 '아름다움'인데, 학생이 '아름다움.'이라고 마침표를 하나 더 썼거나, '아름다운'이라고 살짝 다르게 썼다면 모두 오답으로 처리하는 방식입니다. 이 때문에 SQUAD와 같은 데이터셋에서 모델의 정밀한 답변 능력을 측정하는 데 EM을 주로 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HEQ (Human equivalence score, 인간 등가 점수)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HEQ(Human equivalence score, 인간 등가 점수)는 F1 점수를 활용하는 대안적인 지표입니다. HEQ는 HEQ-Q와 HEQ-D로 두 가지로 나뉩니다. HEQ-Q는 개별 질문(Question)의 정밀도를 측정하는 지표입니다. 모델이 생성한 답변의 F1 점수가 인간의 F1 점수를 넘어설 때, '정답'으로 간주하는 방식입니다. HEQ-D는 각 대화(Dialogue)의 정밀도를 측정하는 지표입니다. 대화에 포함된 모든 질문이 HEQ-Q 기준을 충족할 때, 그 대화가 '정확'하다고 간주하는 방식입니다. HEQ를 '인간 vs AI 퀴즈 대결'에 비유해볼 수 있습니다. HEQ-Q는 문제 하나하나를 채점하는 방식입니다. AI의 답변이 '평균적인 사람'보다 더 낫거나 비슷하면 정답으로 인정해주는 거죠. HEQ-D는 전체 퀴즈 쇼(대화)를 평가하는 방식입니다. AI가 퀴즈 쇼에 나온 모든 문제를 '평균적인 사람'보다 잘 맞혀야만, 그 퀴즈 쇼에서 승리했다고 인정해주는, 더 엄격한 기준입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Rouge(루지)와 BLEU(블루)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기계 번역과 같은 생성 작업에서는 Rouge(루지)와 BLEU(블루)와 같은 지표를 사용합니다. 이 지표는 (번역문과 같은) '정답으로 인정될 수 있는 참고용 텍스트(reference text as ground truth)'가 있을 때 잘 작동합니다. 참고용 정답이 존재한다는 점에서 순수 창작보다는 번역과 같은 작업에 적합한 평가 지표죠. Rouge와 BLEU는 주로, 모델 답변과 정답 사이의 유사도를 측정하는 것이 목표일 때 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 몇 가지 평가 지표들이 있지만 오늘날에도 여전히, 순수하게 생성된 콘텐츠를 평가하는 것은 매우 어려우며, 완벽하게 들어맞는 지표는 개발되지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;생성형 평가 지표 (Generative evaluation mertircs)&lt;/b&gt;&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;&lt;b&gt;LLM 분야에서 가장 어려운 질문은 &quot;어떤 LLM이 더 좋은 모델인가?&quot;입니다.&lt;/b&gt; 이 질문에 답하기 위한 다양한 벤치마크와 리더보드가 제안되었죠. 그렇지만, &lt;b&gt;여전히 이 질문에는 뾰족한 답이 있을 리 없습니다.&lt;/b&gt; 그 답은 LLM의 다양한 측면에 따라 달라지기 때문이에요. '절대적인 1등 LLM은 없다'라는 중요한 점을 짚고 있습니다. &quot;가장 위대한 운동선수가 누구인가?&quot;라는 질문에 답하기 어려운 것과 같습니다. 단거리 달리기는 우사인 볼트가, 농구는 마이클 조던이 최고인 것처럼, LLM도 어떤 모델은 시를 잘 쓰고, 어떤 모델은 코딩을 잘하는 등 각자의 장단점이 있기 때문에 하나의 기준으로 줄 세우기가 어렵다는 의미입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;평가를 위한 LLM 분류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 LLM을 비교할 때 여러 관점을 기준으로 평가해볼 수도 있습니다. 예를 들어, 파라미터 수가 현저히 적은 LLM을 파라미터 수가 더 많은 LLM과 동일하게 비교하기는 어렵습니다. 이러한 관점에서, LLM을 네 가지 카테고리로 분류할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;경량 모델 (small model)&lt;/b&gt;: 파라미터 10억 개 이하&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중간 모델 (medium model)&lt;/b&gt;: 파라미터 10억~100억 개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;거대 모델 (large model)&lt;/b&gt;: 파라미터 100억~1000억 개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;초거대 모델 (very larege model)&lt;/b&gt;: 파라미터 1000억 개 이상&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 '크기(파라미터 수)'에 따라 체급을 나눠야 공정한 비교가 가능하기 때문입니다. '체급' 외에도 LLM을 분류하는 또 다른 기준이 있습니다. LLM을 주로 어디에 활용하는지(primary use case)를 기준으로 나눌 수 있죠.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;파운데이션 모델 (Foundation model)&lt;/b&gt;: 지시 튜닝(instruction fine-tuing)이나 챗 튜닝(chat fine-tuning)이 전혀 없는, 사전 훈련만 마친 언어 모델&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지시 모델 (Instruction model)&lt;/b&gt;: 사전 훈련 후, 지시 튜닝만 거친 언어 모델&lt;/li&gt;
&lt;li&gt;&lt;b&gt;챗 모델 (Chat model)&lt;/b&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;b&gt;원본 모델 (Original models)&lt;/b&gt;: 파운데이션 모델 혹은 파인튜닝한 모델로써 출시한 원본 모델&lt;/li&gt;
&lt;li&gt;&lt;b&gt;튜닝된 모델 (Tuned models)&lt;/b&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;b&gt;공개(Public) 모델&lt;/b&gt;: 가중치를 공개적으로 오픈해놓은 모델&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비공개(Private) 모델&lt;/b&gt;: 가중치가 공개되어 있지 않은 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림은 LLM의 여러 분류 기준들은 시각적으로 나타낸 그림입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GHE7o/btsPO6vUeJx/D8tMlytVmjonlOJaxpButK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GHE7o/btsPO6vUeJx/D8tMlytVmjonlOJaxpButK/img.png&quot; data-alt=&quot;LLM 분류 체계 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GHE7o/btsPO6vUeJx/D8tMlytVmjonlOJaxpButK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGHE7o%2FbtsPO6vUeJx%2FD8tMlytVmjonlOJaxpButK%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;1220&quot; height=&quot;781&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LLM 분류 체계 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&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;989&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4WlsD/btsPNgF3y1J/l9u1UejvJi4StSbYQQ1lR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4WlsD/btsPNgF3y1J/l9u1UejvJi4StSbYQQ1lR1/img.png&quot; data-alt=&quot;구체적인 모델별 LLM 분류 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4WlsD/btsPNgF3y1J/l9u1UejvJi4StSbYQQ1lR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4WlsD%2FbtsPNgF3y1J%2Fl9u1UejvJi4StSbYQQ1lR1%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;989&quot; height=&quot;468&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구체적인 모델별 LLM 분류 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B.&amp;nbsp;여러&amp;nbsp;작업별&amp;nbsp;LLM&amp;nbsp;성능&amp;nbsp;(LLMs'&amp;nbsp;Performance&amp;nbsp;on&amp;nbsp;Different&amp;nbsp;Tasks)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; 상식 추론 (Commonsense reasoning)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 섹션에서는 먼저 '상식 추론(commonsense reasoning)' 능력에 대해 살펴봅니다. 상식 추론이란 모델이 사전 지식과 추론 기술을 결합해, 상식을 얼마나 잘 추론하는지를 나타내는 능력입니다. 이러한 상식 추론은 LLM 모델의 중요한 능력 가운데 하나에요. 예를 들어, HellaSwag 데이터셋으로부터, 이야기의 일부만 주어진 상태에서 이어질 내용을 찾는 것은 꽤나 어렵습니다. 주어진 선택지들이 교묘하게 만들어져 있어, 세상에 대한 사전 지식 없이는 정답을 고를 수 없기 때문입니다. 이렇게 기존 지식을 활용하여 글로 묘사한 장면이나 사실을 이해하는 능력은 특별히 주목할 만한 가치가 있겠죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 표를 보시죠. 각 모델별 상식 추론 능력을 비교한 표입니다. HellaSwag에서는 GPT-4가 가장 성능이 좋았네요. 반면, OBQA(OpenBookQA) 데이터셋에서는 Davinci-003이 가장 높은 점수를 받았습니다. 그런데, OBQA에 대한 결과는 모든 모델에 대해 측정되지는 않았습니다. 그러니 OBQA에서 더 성능이 좋은 다른 모델이 있을 가능성이 높습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;1041&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cL63ih/btsPP6CbFNT/4gQBKUC6lf2h58oc6scQW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cL63ih/btsPP6CbFNT/4gQBKUC6lf2h58oc6scQW1/img.png&quot; data-alt=&quot;모델별 상식 추론 능력 비교 표 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cL63ih/btsPP6CbFNT/4gQBKUC6lf2h58oc6scQW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcL63ih%2FbtsPP6CbFNT%2F4gQBKUC6lf2h58oc6scQW1%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;350&quot; height=&quot;611&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;1041&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모델별 상식 추론 능력 비교 표 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;세상 지식 (World knowledge)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상식 추론에 이어, 다음 평가 분야인 '세상 지식(World knowledge)'으로 넘어가겠습니다. 세상 지식은 주로 일반 상식 질문에 대한 것입니다. 예를 들어, Wikifact 데이터셋에는 &quot;특정 유명한 책의 저자는 누구야?&quot;와 같은 질문들이 있는데, 참고 자료도 함께 제공됩니다. &lt;b&gt;'상식 추론'이 숨은 맥락을 읽는 능력이라면, '세상 지식'은 사실(지식) 그 자체를 얼마나 많이, 그리고 정확하게 알고 있는지를 나타내는 능력에 가깝습니다.&lt;/b&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;857&quot; data-origin-height=&quot;1097&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7XpxR/btsPP4EmWez/lRg44hbEjyFTaP3X5JyqBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7XpxR/btsPP4EmWez/lRg44hbEjyFTaP3X5JyqBK/img.png&quot; data-alt=&quot;모델별 세상 지식 비교 표 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7XpxR/btsPP4EmWez/lRg44hbEjyFTaP3X5JyqBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7XpxR%2FbtsPP4EmWez%2FlRg44hbEjyFTaP3X5JyqBK%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;450&quot; height=&quot;576&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;1097&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모델별 세상 지식 비교 표 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;코딩 능력 (Coding)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'코딩(coding)' 혹은 '코드 생성(code-generation)' 능력도 LLM의 중요한 능력 중 하나입니다. 아래 표는 여러 모델별 코딩 능력을 비교한 결과입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCMf2v/btsPQuphRRM/FkxzaXRXuK2yaLWfIlFyek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCMf2v/btsPQuphRRM/FkxzaXRXuK2yaLWfIlFyek/img.png&quot; data-alt=&quot;모델별 코딩 능력 비교 표 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCMf2v/btsPQuphRRM/FkxzaXRXuK2yaLWfIlFyek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCMf2v%2FbtsPQuphRRM%2FFkxzaXRXuK2yaLWfIlFyek%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;280&quot; height=&quot;499&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모델별 코딩 능력 비교 표 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&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;size18&quot;&gt;&lt;b&gt;산술 추론 (Arithmetic reasoning)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산술 추론(arithmetic reasoning)은 LLM이 달성하기 어려운 또 다른 추론 능력입니다. 인간에게는 간단한 덧셈, 뺄셈일지라도, 언어 모델은 이를 텍스트 속에서 정확히 이해하고, 올바른 순서로 계산하며, 논리적인 추론을 해야만 정답을 맞힐 수 있습니다. 그만큼 LLM에게 '수학'은 어려운 과제입니다. 가령, GSM8K 데이터셋은 정답과 함께 초등학교 수준의 수학 문제들로 구성되어 있습니다. 다음 표는 여러 모델별 산술 추론 능력을 보여주는 표입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVOl7Q/btsPOIPTIzU/xB1KNK6PiiK1lQY28obPp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVOl7Q/btsPOIPTIzU/xB1KNK6PiiK1lQY28obPp0/img.png&quot; data-alt=&quot;모델별 산술 추론 능력 비교 표 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVOl7Q/btsPOIPTIzU/xB1KNK6PiiK1lQY28obPp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVOl7Q%2FbtsPOIPTIzU%2FxB1KNK6PiiK1lQY28obPp0%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;350&quot; height=&quot;273&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모델별 산술 추론 능력 비교 표 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; 환각 (Hallucination)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM은 단순히 다음 토큰을 예측하는 모델이기 때문에, 때때로 환각(hallucination) 현상이 발생하기도 합니다. 환각 측정 지표는 LLM이 얼마나 신뢰할 수 있고 믿을 만한지를 측정하는 중요한 요소 중 하나입니다. 하지만 환각을 측정하는 것이 보기보다 쉽지 않습니다. 왜냐하면 하나의 사실(facts)도 서로 다른 스타일로 쓰일 수 있고, 글쓰기에서는 그러한 미세한 변화조차도 '어떤 부분이 환각인지를 탐지'하는 데 어려움을 줄 수 있기 때문입니다. 어떤 LLM이 텍스트 속 잘못된 정보로 인한 환각을 더 잘 탐지한다면, 그 모델이 더 신뢰할 만하다고 가정하는 것은 타당합니다. HaluEval은 환각을 측정하는 데이터셋 중 하나입니다. 이러한 데이터셋을 이용해 환각을 평가해도 되고, '정답을 평가하는 또 다른 모델'을 활용해 특정 모델이 환각을 일으켰는지 아닌지를 측정하는 방법도 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;VII. 당면 과제와 향후 발전 방향 (CHALLENGES AND FUTURE DIRECTIONS)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 장들에서 살펴봤듯이, LLM은 지금까지 굉장히 놀라운 성과들을 보였습니다. 동시에, 이 분야는 여전히 새롭고 매우 활발한 연구 분야이며, 혁신의 속도는 점차 빨라지고 있습니다. 지금까지 LLM의 현주소를 살펴봤지만, 여전히 '성장기'에 있는 분야로써 앞으로가 더 기대되는 분야이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 다른 모든 분야와 마찬가지로, 앞으로 해결해야 할 수많은 과제가 여전히 남아있습니다. 여기서는 지금까지 알려진 몇 가지 당면 과제에 대해 간략히 언급해보겠습니다. LLM의 당면 과제들이 자세히 궁금하신 분은 Kaddour 외 연구진의 논문 &quot;Challenges and applications of large language models&quot;을 참고하시기 바랍니다. 이 논문에서는 LLM이 발전하는 과정에서 해결해야 할 과제들에 대해 자세히 논합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. 더 작고 효율적인 언어 모델 (Smaller and more efficient Language Models)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문은 거대 언어 모델(LLM)에 대한 서베이 논문입니다. 대규모 모델이 개발되면서 성능이 좋아지다 보니 '더 클수록 좋다'라는 경향이 있었습니다. 하지만, 이러한 거대 모델들은 비용이 많이 들고, 추론 시간이 길어지는 등 여러 면에서 비효율적입니다. 그렇다 보니 비용 효율성을 위해, 소규모 언어 모델(Small Language Models, SLMs)이 연구되고 있습니다. 특히, 완전한 범용성이 필요하지&amp;nbsp; 않은 작업에는 굳이 거대 언어 모델이 필요치 않기 때문에 이런 경우엔 SLM이 더욱 효과적입니다. 대표적인 SLM으로는 마이크로소프트의 Phi-1, Phi-1.5, Phi-2가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 우리는 더 작고 효율적인 모델을 훈련시키는 방법에 대해 많은 연구를 해야 합니다. 파라미터 효율적 파인튜닝(parameter-efficient fine-tuning, PEFT), 교사/학생(teacher/student) 모델, 그리고 지식 증류(distillation)와 같은 기술들은 SLM을 개발하기 위해 계속해서 활용하고 탐구해야 할 기술들입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. 어텐션 이후의 새로운 아키텍처 패러다임 (New Post-attention Architectural Paradigms)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜스포머의 시대는 영원할까요? 트랜스포머는 처음 등장한 이례로 지금까지 대부분의 LLM 프레임워크에서 제일 중요하고 변치 않는 아키텍처입니다. 하지만 이 아키텍처가 얼마나 더 유행할지는 알 수 없습니다. 그리고 딥러닝과 NLP 분야에서 어텐션 기반의 트랜스포머를 뛰어넘을 새로운 아키텍처는 무엇이 될지도 큰 물음표죠. 2012년에 나온 AlexNet 이후, 우리는 LSTM, GRU, seq2seq 등 많은 아키텍처가 유행했다가 사라지는 것을 봐왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근, 어텐션을 뛰어넘는 새로운 아키텍처, 즉 탈-어텐션(post-attention)에 대한 연구가 진행되고 있습니다. 대표적인 탈-어텐션 모델로는 '상태 공간 모델(State Space Models, SSMs)'이 있습니다. 사실 상태 공간 모델이라는 개념은 머신러닝에서 오래된 개념입니다. 그런데 언어 모델의 맥락에서는 새로운 '구조화된 상태 공간 모델(Structure State Space Model, S4)' 아키텍처를 지칭하는 데 쓰입니다. S4에 속하는 모델로는 Mamba, Hyena, Striped Hyena가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 모델은 성능과 효율성 측면에서 경쟁력이 있습니다. 뿐만 아니라, 전통적인 어텐션 기반 아키텍처는 한 번에 처리할 수 있는 문맥 길이(context length)가 제한되어 있습니다. 많은 프롬프트에 대해 좋은 답변을 하려면 문맥이 필요합니다. 가령, '나에게 재밌는 영화를 추천해줘'라는 요청에 응답을 하려면, '나'에 대한 문맥뿐만 아니라, 어떤 영화가 있고 내가 아직 보지 않은 영화가 무엇인지에 대한 정보도 필요로 하죠. 문맥 길이(context length)는 특히 RAG에서 중요하죠. RAG처럼 참고 자료를 많이 봐야 하는 작업에서는 특히 '문맥 길이'가 중요한 것입니다. 문맥 길이가 길수록, 더 많은 토큰을 문맥에 넣을 수 있으니까요. 모델이 더 많은 정보에 접근할수록, 그 응답은 더 좋아질 것입니다. 하지만, 문맥이 매우 길어지면, 모델이 모든 것을 기억하고 모든 정보를 효율적으로 처리하기가 어려워집니다. 특히&amp;nbsp;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;어텐션 기반 모델은 문맥이 길 경우 비효율적입니다. 바로 그 이유 때문에, 더 긴 문맥을 처리할 수 있는 새로운 아키텍처를 제시하는 많은 연구를 기대해봐야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;단순히 어텐션 메커니즘에 대한 대안을 제시하는 것도 방법이 되겠지만, 트랜스포머 아키텍처 자체를 재고해볼 수도 있습니다. 즉, &lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;'엔진 부품(어텐션)'만 바꾸는 것을 넘어, '자동차 설계(트랜스포머)' 자체를 완전히 바꾸려는 시도를 해볼 수도 있다는 말이에요. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이러한 시도의 예로는 '모나크 믹서(Monarch Mixer)'가 있습니다. 모나크 믹서는 GPU 연산 효율이 좋은 '모나크 행렬(Monarch matrices)'을 이용해 전체적인 효율성을 극대화하려는 새로운 설계 철학입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;다른 한편으로는, 어텐션과 호환되는(attention-compatible) 아키텍처도 있습니다. 더 강력한 LLM을 만드는 데 기여를 하게 되어, 최근 큰 힘을 얻고 있는 아키텍처입니다. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이러한 메커니즘의 가장 적합한 예는 '전문가 혼합(Mixture of Experts, MoE)'일 것입니다. MoE는 딥러닝 시대 이전에도 수년간 머신러닝 분야에서 쓰던 개념이지만, 이후에야 인기를 끌게 되었습니다. 특히 트랜스포머 모델과 LLM에서 주로 활용되었습니다. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;일례로, GLaM 모델은 1.2조 개의 파라미터를 갖지만, 추론 단계에서는 64개의 전문가 모델 중 단 2개만 이용합니다. &lt;b&gt;오늘날 MoE를 소위 '프론티어 LLM(frontier LLMs)'이라고 부릅니다. 즉 가장 성능 좋고 발전된 모델이라는 뜻이죠.&lt;/b&gt; GPT-4 자체도 MoE 아키텍처에 기반했다는 소문이 있습니다. Mixtral과 같은 뛰어난 모델도 기본적으로 기존 LLM의 MoE 버전입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;여기서 중요한 점은 MoE는 어텐션 기반인지 여부와 관계없이 어떠한 아키텍처에서도 활용될 수 있다는 사실입니다. 실제로, Mamba와 같은 SSM 기반 LLM에도 MoE를 적용했습니다. &lt;b&gt;따라서 앞으로&amp;nbsp;어떤&amp;nbsp;새로운&amp;nbsp;아키텍처가&amp;nbsp;등장하더라도,&amp;nbsp;MoE는&amp;nbsp;그&amp;nbsp;모델을&amp;nbsp;더&amp;nbsp;크고&amp;nbsp;효율적으로&amp;nbsp;만드는&amp;nbsp;핵심&amp;nbsp;기술로&amp;nbsp;계속해서&amp;nbsp;사용될&amp;nbsp;것입니다.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;C. 멀티모달 모델 (Multi-modal Models)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;멀티모달(multi-modal)이란 텍스트, 이미지, 비디오, 오디오와 같은 여러 종류의 데이터를 함께 이해하고 처리하는 방식을 뜻합니다. 멀티모달 모델은 질의응답, 콘텐츠 생성, 창작 예술, 헬스케어, 로보틱스 등 다양한 분야에서 여러 형태로 활용이 될 것입니다. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이미 성능이 뛰어난 멀티모달 LLM들이 여럿 있습니다. LLAVA , LLAVA-Plus , GPT-4 , Qwen-vl , Next-GPT 등이 있죠. 이러한 멀티모달 모델은 앞으로도 계속해서 발전할 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;D. 발전하는 LLM 도구 사용 및 증강 기술 (Improved LLM Usage and Augmentation techniques)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;4장에서 설명했듯이, LLM에는 환각과 같은 여러 단점이나 한계가 있었습니다. 4장에서 배운 고급 프롬프트 엔지니어링, RAG, 도구 사용, 에이전트 같은 기술들이 바로 LLM의 한계를 극복하고 잠재력을 끌어내는 핵심 열쇠이며, 앞으로 이 분야의 연구는 더욱 활발해질 것입니다. 다시 말해, '더 좋은 모델'을 만드는 것만큼이나, '이미 있는 모델을 더 잘 쓰는 법'을 연구하는 것도 아주 중요하다는 뜻이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;LLM은 기존의 추천 시스템 시장을 바꾸고 있습니다. 기존의 추천 시스템이 사용자의 '클릭 기록'이나 '구매 기록' 같은 정형화된 데이터에 크게 의존했다면, LLM은 사용자가 남긴 '리뷰 텍스트'나 '검색어' 같은 비정형 텍스트 데이터를 깊이 있게 이해할 수 있습니다. 예를 들어, '요즘 날씨가 추워서 따뜻한 국물이 당기네'라는 사용자의 채팅 내용을 문맥으로 파악하여, 근처의 설렁탕 맛집을 추천해주는 훨씬 더 고도화된 개인화가 가능해지는 것이죠. 앞으로 개인화(personalization)와 추천(recommendations)뿐 아니라, 다른 머신러닝 기술을 사용하는 여러 응용 분야에서도 LLM을 적용하려는 연구가 계속될 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;마지막으로, 우리의 관심이 많아지고 있는 또 다른 연구 분야는 LLM 기반 에이전트입니다. 외부 도구를 적극 활용하고 스스로 의사결정도 하는 LLM 에이전트를 개발하는 작업은 흥미로우면서도 도전적인 과제입니다. &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 이 LLM 에이전트 기술이 어쩌면 인공 일반 지능(AGI)으로 가는 디딤돌이 될 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;E. 보안 및 윤리적 AI (Security and Ethical/Responsible AI)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;LLM이 사회에 미치는 영향력이 커질수록, 해커들이 '적대적 공격'을 통해 잘못된 정보를 퍼뜨리거나, 사람들을 조종하는 무기로 AI를 사용할 위험도 함께 커집니다. 따라서 방화벽을 쌓고(보안), 교묘한 공격을 간파할 수 있도록 더 똑똑하게 만드는(추론 능력 향상) 연구가 반드시 필요하겠습니다. LLM을 '견고한 요새'로 만드는 것이 중요하다는 뜻입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;LLM에 내재된 윤리적 문제와 편향을 해결하는 것도 중요한 화두입니다. LLM이 공정하고, 편향되지 않으며, 민감한 정보를 책임감 있게 처리할 수 있도록 보장하기 위한 노력들이 이루어지고 있죠. LLM을 점점 더 많은 사람들이 사용하고 있습니다. 그렇기 때문에 LLM이 편향되지 않고 책임감 있게 행동하도록 만드는 것은 상당히 중요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이것으로 7장, 'LLM의 당면 과제와 향후 발전 방향'에 대해 알아보았습니다. LLM이 더 작고 효율적으로, 더 새롭고 강력한 아키텍처로, 더 다양한 데이터를 처리하는 멀티모달 모델로 발전할 것이라는 미래를 엿보았습니다. 동시에, 이 강력한 기술을 더 잘 사용하고, 더 안전하고 윤리적으로 만드는 것이 얼마나 중요한 과제인지도 확인했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;VIII. 결론 (CONCLUSION)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문은 지난 몇 년간 개발된 LLM에 대한 서베이 논문입니다. 먼저 BERT와 같은 초기 사전 훈련 언어 모델을 살펴본 뒤, 세 가지 인기 있는 LLM 계열(GPT, LLaMA, PaLM)과 다른 대표적인 LLM들을 알아보았습니다. 그다음, LLM을 만들고, 증강시키고, 사용하는 방법과 기술들을 살펴보았죠. 또한, 인기 있는 LLM 데이터셋과 벤치마크를 간단히 확인했고, 공개 벤치마크를 토대로 주요 모델들의 성능을 비교해봤습니다. 마지막으로, 당면 과제와 미래 연구 방향을 제시하며 논문을 마무리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림은 본 논문에서 설명한 긴 여정을 대제목과 중제목으로 나눠 개괄하고 있습니다. 이 모든 과정을 통해 LLM의 과거, 현재, 그리고 미래를 조망해봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;page4_figure2_highres.png&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;2093&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgUUZX/btsPLHxbR5T/X82QdZy35F5Rlk3ElrW9k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgUUZX/btsPLHxbR5T/X82QdZy35F5Rlk3ElrW9k1/img.png&quot; data-alt=&quot;전체 프로세스 (출처: Shervin Minaee et al., &amp;quot;Large Language Models: A Survey&amp;quot;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgUUZX/btsPLHxbR5T/X82QdZy35F5Rlk3ElrW9k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgUUZX%2FbtsPLHxbR5T%2FX82QdZy35F5Rlk3ElrW9k1%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;1532&quot; height=&quot;2093&quot; data-filename=&quot;page4_figure2_highres.png&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;2093&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전체 프로세스 (출처: Shervin Minaee et al., &quot;Large Language Models: A Survey&quot;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>논문 리뷰</category>
      <category>LLM survey 논문</category>
      <category>llm 개괄</category>
      <category>LLM 개요</category>
      <category>LLM 논문</category>
      <category>LLM 서베이</category>
      <category>LLM 서베이 논문</category>
      <category>LLM 설명</category>
      <category>LLM 역사</category>
      <category>거대 언어 모델 서베이</category>
      <category>대규모 언어 모델 서베이</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/321</guid>
      <comments>https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Large-Language-Models-A-Survey-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0#entry321comment</comments>
      <pubDate>Wed, 13 Aug 2025 23:40:34 +0900</pubDate>
    </item>
    <item>
      <title>고려대학교 AI 야간대학원 두 번째 학기를 마치며</title>
      <link>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%91%90-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;고려대학교 AI 야간대학원 두 번째 학기를 마쳤습니다. 두 번째 학기를 마친 후기를 이렇게 적는 까닭은, 이 글을 우연히 발견한 누군가에게 도움을 드리고 싶은 마음도 있지만, 4개월이라는 적지 않은 시간을 들인 만큼 한 학기를 돌아 보며 배운 바를 되짚어 보기 위함도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 실용적인 내용은 없습니다. 그런 내용이 궁금하다면 '&lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%A9%B4%EC%A0%91-%ED%9B%84%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;고려대학교 AI 야간대학원 면접 후기&lt;/a&gt;'와 '&lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%B2%AB-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;고려대학교 AI 야간대학원 첫 학기를 마치며&lt;/a&gt;' 게시글을 봐주시면 좋을 것 같네요.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;두 번째 학기를 마친 소감, 세 줄 요약&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;그럼에도 여전히 가치는 있다고 생각한다.&lt;/li&gt;
&lt;li&gt;'공부란 무엇인가'에 관해 생각해 본 한 학기였다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입학하기 전에 기대했던 바와는 조금 달랐습니다. AI 대학원이니 학문의 깊이가 꽤 깊을 줄 알았죠. 그런데 생각만큼 깊게 배우진 않더라고요. 상황상 어쩔 수 없다는 건 이해가 됩니다. 수업 시간 자체가 과목당 일주일에 1시간 30분으로 너무 적기 때문이기도 하고, 대부분 직장인이라 과제를 타이트하게 내지 않기 때문이기도 할 테죠. 그럼에도 여전히 가치는 있다고 생각합니다. 제한된 시간 안에서 내가 하는 만큼 얻어가는 건 충분히 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;앎과 공부를 향한 고찰&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엉뚱한 생각일 수도 있겠지만, 학기가 다 끝날 무렵 문득 이런 생각이 들더라고요.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;'내가 완벽히 아는 게 얼마나 될까?'&lt;br /&gt;'앞으로 공부는 우리에게 어떤 역할을 할까?'&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 '안다(know)'라고 할 때, 얼마나 알아야 안다고 할까요? 어떤 개념에 관해 1부터 10까지 다 알아야 완벽히 안다고 해 봅시다. 그런데 대체로는 1, 2, 3, 5, 6, 8, 9, 10 정도만 알아도 그 개념을 안다고 말합니다. 중간에 4와 7이 빠졌는데도 말이죠. 4, 7을 잘 몰라도 흐름을 이해하는 데 큰 지장이 없으니 1부터 10까지 다 이해했고, 그래서 그 개념을 다 안다고 착각하게 되는 겁니다. 문제는 내가 뭘 모르는지 쉽게 알지 못한다는 점입니다. 나는 1부터 10까지의 흐름을 이해한다고 생각하지만, 깊게 물어보면 대답하지 못하는 지점이 생기기 마련이죠. 그럼 그 개념을 안다고 할 수 없습니다. 저도 수업을 들으며 완벽히 알지 못하는 지점을 종종 발견하곤 했습니다. 그 빈틈을 채울 수 있었다는 점에서 이번 학기 수업도 충분히 가치가 있었습니다.&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학년 때니까 어언 20년 가까이 공부라는 걸 했네요. 그런데 곰곰히 생각해 보니 완벽히 아는 게 정말로 거의 없는 것 같습니다. 20년씩이나 했는데도 말이죠. 더 많은 책을 읽고 더 많이 공부를 해도 달라질 것 같진 않습니다. 이번 학기 수업을 들으며, 제가 원래 '알고 있다'고 생각한 개념을 사실은 완벽히는 알지 못하고 있었다는 점도 깨닫곤 했고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'내가 완벽히 아는 게 얼마나 될까'라는 생각과 더불어, '앞으로 우리에게 공부란 어떤 의미일까?'라는 생각도 들었습니다. 집약도는 떨어지겠지만 앞으로도 조금씩은 계속 공부를 하겠죠. 그런데 앞으로는 이렇게 공부하는 것에 대한 의미가 무엇일까요? 우리는 지금 LLM 세상에 살고 있습니다. ChatGPT를 비롯한 LLM 덕분에 원하는 정보를 꽤 높은 정확도로 매우 빠르게 얻을 수 있지요. 과거에는 내 머릿속에 최대한 많은 정보를 넣어두고, 원하는 때에 끄집어 내는 능력이 중요했습니다. 그래서 머리에 많은 걸 담고 있는 사람이 유리했죠. 그런데 지금은 어떤가요? 머릿속에 많은 정보를 담고 있는 능력은 별로 중요하지 않습니다. '지식 관점의 앎'이 별로 중요하지 않다는 말이죠. 이런 상황에서 '공부'란 무엇일까요? 물론 지식보다 응용력이 중요하겠지만, 응용마저 LLM이 해주는 세상인데 말이죠. 우리는 이제 어떤 방식으로 공부를 해야 할까요? 오래 전에 하던 방식으로 계속해서 공부를 해야 할까요? '공부의 의미'가 바뀌지 않을까요?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어차피 저의 목적지향적 학습은 대학교 때 끝났으니, 사실 공부의 의미가 제겐 크게 중요하지 않습니다. 지금의 공부는 순전히 탐구심에서 비롯한 학습이기 때문입니다. 다만, 대학교 캠퍼스를 거닐다보면 '미래에 공부란 어떤 역할을 할까?'라는 질문을 되뇌지 않을 수가 없더군요.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;과목별 후기&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기계학습&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;다 들어본 결과 만족한 점도, 아쉬운 점도 있었어요. 만족한 점은 제 기계학습 지식의 빈틈을 채워주었다는 점입니다. 저도 기계학습의 기본적인 내용은 어느 정도 안다고 생각했지만, 중간 중간 빈틈이 더러 있었습니다. 그 빈틈을 채울 수 있었다는 점에서 '기계학습' 과목이 만족스러웠습니다. 특히나 backpropagation을 손으로 직접 계산해 보는 과정을 배운 점도 좋았습니다. backpropagation의 원리와 계산 방식은 익히 알고 있었지만, 밑바닥부터 partial derivative를 직접 계산해 여러 Layer와 Nonlinear activation function을 거쳐 Loss부터 input까지 gradient를 손으로 직접 구해보는 과정은 꽤 의미가 있었습니다.&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-filename=&quot;기계학습_midterm.png&quot; data-origin-width=&quot;4962&quot; data-origin-height=&quot;3508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1MBRg/btsIwtShd1d/VsaJMknK2dc5zE6cU6St30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1MBRg/btsIwtShd1d/VsaJMknK2dc5zE6cU6St30/img.png&quot; data-alt=&quot;midterm 요약노트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1MBRg/btsIwtShd1d/VsaJMknK2dc5zE6cU6St30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1MBRg%2FbtsIwtShd1d%2FVsaJMknK2dc5zE6cU6St30%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;4962&quot; height=&quot;3508&quot; data-filename=&quot;기계학습_midterm.png&quot; data-origin-width=&quot;4962&quot; data-origin-height=&quot;3508&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;midterm 요약노트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;기계학습_final.png&quot; data-origin-width=&quot;4962&quot; data-origin-height=&quot;3508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q3woU/btsIwwOUDVG/YbjKvEWSkkJ9DA91iD8i0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q3woU/btsIwwOUDVG/YbjKvEWSkkJ9DA91iD8i0k/img.png&quot; data-alt=&quot;final 요약노트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q3woU/btsIwwOUDVG/YbjKvEWSkkJ9DA91iD8i0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq3woU%2FbtsIwwOUDVG%2FYbjKvEWSkkJ9DA91iD8i0k%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;4962&quot; height=&quot;3508&quot; data-filename=&quot;기계학습_final.png&quot; data-origin-width=&quot;4962&quot; data-origin-height=&quot;3508&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;final 요약노트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;심층강화학습&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 크게 세 범주로 나눌 수 있습니다. 지도학습, 비지도학습, 강화학습. 저는 강화학습에 대해서는 거의 몰랐기 때문에, 이 참에 기초를 다져보자는 마음으로 수강을 했습니다. 매우 정직한 과정이었습니다. 퀴즈 1번, 논문 리뷰 발표 1번, 기말고사 1번으로 100% 이론 과정이었죠. 실습이 있었다면 더욱 만족스러웠겠지만, 물리적인 시간이 부족하다는 점을 감안하면 충분히 만족스러운 과정이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학부 3학년 여름 방학 시절 멋모르고 대학원 과정을 청강한 적이 있었습니다. 청강이라 학점에 반영되진 않아 맘 편히 들었었죠. 당시 몬테카를로 마르코프체인(MCMC)이 잘 이해가 안 가 진도를 제대로 못 따라간 기억이 있습니다. 더 정확히 말하면 이해하려는 노력을 크게 하지 않았습니다. 맘 편히 청강한 거니까요. 교수님께서 자꾸 &quot;MCMC&quot; 하시는데, 제가 아는 MC란 래퍼를 지칭하는 'Microphone Checker' 뿐이었죠. 이번에 수강한 심층강화학습 덕분에 비로소 몬테카를로 마르코프체인이 무엇인지, 원리가 어떻게 되는지 알게 되었습니다.&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;Markov Decision Process&lt;/li&gt;
&lt;li&gt;Planning by Dynamic Programming&lt;/li&gt;
&lt;li&gt;Model-free Prediction&lt;/li&gt;
&lt;li&gt;Model-free Control&lt;/li&gt;
&lt;li&gt;Value Function Approximation&lt;/li&gt;
&lt;li&gt;Policy Gradient&lt;/li&gt;
&lt;li&gt;Integrating Learning and Planning&lt;/li&gt;
&lt;li&gt;Basic Deep Reinforcement Model&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인공지능 응용세미나&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능 윤리를 다룬 세미나 수업이었습니다. 응용세미나라고 하면 대개 기술을 실제 산업에서 어떻게 활용하는지 사례를 바탕으로 배우는 걸 떠올리죠. 그런데 이번 수업의 토픽은 '인공지능 윤리'였습니다. 실라버스에도 그렇게 써 있었고요. 흥미로운 토픽이라 수강신청을 했습니다. 기술적인 내용은 다른 수업에서 매번 다룹니다. 그런데 이런 윤리적, 사회적, 철학적, 문화적 측면에서 다각적으로 생각해볼 수 있는 주제를 수업에서 접하긴 쉽지 않죠. 그래서 신청을 했습니다. 다만 제가 기대한 바는 서로 활발하게 토론이나 토의를 하는 모습이었습니다. 교수님께서 주제를 던져주면 그에 대한 서로의 생각을 들어보는 그런 수업이요. 마치 마이클 샌델의 'Justice' 수업처럼 말이죠.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로는 제 기대처럼 수업이 흘러가진 않았습니다. 절반 정도는 교수님께서 강의를 하셨고, 나머지 반은 수강생이 사전에 조사하거나 분석한 내용을 발표했습니다. 그래도 괜찮은 수업이었습니다. 기술적인 내용이 아니라 윤리적이고 사회적인 AI 이슈를 고민해 볼 수 있는 수업은 흔치 않으니까요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djUlwZ/btsIvmNjdHH/YoDjXlCbB94oskcFylYJF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djUlwZ/btsIvmNjdHH/YoDjXlCbB94oskcFylYJF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djUlwZ/btsIvmNjdHH/YoDjXlCbB94oskcFylYJF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjUlwZ%2FbtsIvmNjdHH%2FYoDjXlCbB94oskcFylYJF0%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;494&quot; height=&quot;126&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 학기부터는 휴학을 했습니다. 출판사와 계약을 해서 1년 정도 휴학을 하고, 작업에 매진할 계획입니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[update]&lt;/b&gt; 세 번째 학기 후기는 &lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%84%B8-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;다음 포스팅&lt;/a&gt;에서 확인하실 수 있습니다.&lt;/p&gt;</description>
      <category>회고</category>
      <category>ai 대학원 후기</category>
      <category>AI 야간대학원 후기</category>
      <category>AI 특수대학원</category>
      <category>고대 ai 대학원</category>
      <category>고대 야간대학원</category>
      <category>고대 야간대학원 후기</category>
      <category>고대 인공지능 대학원</category>
      <category>고려대학교 인공지능 대학원</category>
      <category>인공지능 야간대학원 후기</category>
      <category>특수대학원 후기</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/319</guid>
      <comments>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%91%90-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0#entry319comment</comments>
      <pubDate>Fri, 6 Sep 2024 22:23:51 +0900</pubDate>
    </item>
    <item>
      <title>[리처드 도킨스] 이기적 유전자</title>
      <link>https://bkshin.tistory.com/entry/%EB%A6%AC%EC%B2%98%EB%93%9C-%EB%8F%84%ED%82%A8%EC%8A%A4-%EC%9D%B4%EA%B8%B0%EC%A0%81-%EC%9C%A0%EC%A0%84%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1976년에 출간된 《이기적 유전자》는 진화생물학 분야의 대표적인 고전이다. 이 책 덕분에 진화생물학을 처음 접했는데, 퍽 매력적인 학문이라고 생각한다. 이 세상에 관해 상당히 많은 걸 설명해주기 때문이다. 우리가 왜 무언가는 좋아하고 무언가는 싫어하는지 그 이유를 설명해준다. 우리가 왜 서로 싸우고 경쟁하는지도 설명해준다. 우리는 왜 서로 의사소통을 하며 살아가는지도 설명해주고, 우리를 비롯한 지구상 생물이 왜 이런 모습을 갖게 됐고, 왜 이렇게 행동하며, 왜 이런 감정을 느끼는지 알려준다. 종합하자면 모든 생명체가 왜 이렇게 살아가고 있는지를 밝혀주는 학문이 바로 진화생물학이라고 생각한다. 이런 궁금증에 대해서는 지금까지 철학을 비롯한 인문학에서 답하려고 시도했지만 합치된 결론에 도달하지 못했다. 하지만 진화생물학은 명쾌한 답을 준다. 이러한 이유 때문에 나도 진화생물학에 관심이 생겼다. 《이기적 유전자》를 읽은 뒤에는 아래와 같은 영화, 다큐, 강연도 챙겨봤다. 그만큼 재밌는 학문이다.&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;다큐 - 《코스모스: 시간과 공간을 초월한 빅 히스토리》 (10시간 분량)&lt;/li&gt;
&lt;li&gt;강연 - 《2022 카오스 강연 '진화'》 (20시간 분량)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;《이기적 유전자》가 주장하는 바는 사람을 비롯한 모든 동물은 유전자가 만들어 낸 기계라는 점이다. 유전자들은 스스로를 복제하는 존재고 우리는 그들의 생존 기계다. 우리의 임무를 다하면 우리는 폐기된다. 그러나 유전자는 지질학적 시간을 살아가는 존재이며, 영원하다. 우리는 유전자가 프로그래밍한 대로 살아가는 존재다. 허무해보일지라도 그게 사실이다. 무의미의 의미를 생각한다면 고귀한 사실 같기도..?&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;진화와 자연선택&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20세기의 사상적 혁명을 이룬 사상가로 프로이트, 마르크스, 다윈을 꼽는다. 세 명이 주장한 이론 가운데 유일하게 다윈의 이론만이 오늘날까지 정설로 인정받고 있다. 다윈은 1859년 《종의 기원》을 출간하며 세상을 뒤집었다. 인간을 비롯한 생물의 기원이 무엇인지를 과학적으로 설명했기 때문이다. 이를 진화론이라고 한다. 흔히 진화론하면 사람들은 아래와 같은 그림을 떠올린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVtRIa/btsEZlKjlHE/dGeGyqz6YS1yCHcVkztyek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVtRIa/btsEZlKjlHE/dGeGyqz6YS1yCHcVkztyek/img.jpg&quot; data-alt=&quot;출처 : https://www.sciencetimes.co.kr/wp-content/uploads/2019/09/human-evolution.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVtRIa/btsEZlKjlHE/dGeGyqz6YS1yCHcVkztyek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVtRIa%2FbtsEZlKjlHE%2FdGeGyqz6YS1yCHcVkztyek%2Fimg.jpg&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;480&quot; height=&quot;164&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.sciencetimes.co.kr/wp-content/uploads/2019/09/human-evolution.jpg&lt;/figcaption&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-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfyopH/btsEZomJJz9/zKEXXo7J1WabaGFQK0egFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfyopH/btsEZomJJz9/zKEXXo7J1WabaGFQK0egFK/img.png&quot; data-alt=&quot;출처 : https://www.seouland.com/arti/society/society_general/8499.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfyopH/btsEZomJJz9/zKEXXo7J1WabaGFQK0egFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfyopH%2FbtsEZomJJz9%2FzKEXXo7J1WabaGFQK0egFK%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;550&quot; height=&quot;471&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.seouland.com/arti/society/society_general/8499.html&lt;/figcaption&gt;
&lt;/figure&gt;
&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;725&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mj2hW/btsEVKkDguE/dP2X1YYTCOKq1qoZS8S2y0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mj2hW/btsEVKkDguE/dP2X1YYTCOKq1qoZS8S2y0/img.gif&quot; data-alt=&quot;출처 : https://www.businessinsider.com/this-evolution-graphic-will-make-you-feel-tiny-2015-5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mj2hW/btsEVKkDguE/dP2X1YYTCOKq1qoZS8S2y0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/mj2hW/btsEVKkDguE/dP2X1YYTCOKq1qoZS8S2y0/img.gif&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;1920&quot; height=&quot;725&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;725&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.businessinsider.com/this-evolution-graphic-will-make-you-feel-tiny-2015-5&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이렇게 수많은 종들 중 어떤 종이 다른 종보다 우월하다는 객관적인 근거는 아무것도 없다. 침팬지와 인간, 도마뱀과 곰팡이, 우리 모두는 30억 년이 넘는 긴 시간 동안 자연선택이라는 과정을 거쳐 진화해왔다. 각각의 종 안에서도 어떤 개체는 다른 개체보다 생존하는 자손을 더 많이 남겨 번식에 성공적인 유전자가 다음 세대에 더욱 많아지게 된다. 이것이 자연선택이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;우리는 자연선택의 결과물이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;유전자와 생존 기계&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;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&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;그런데 다르게 생각해볼 수 있다. 《이기적 유전자》를 읽으면, 우리가 왜 어떨 때는 행복을 느끼고 어떨 때는 고통을 느끼는지, 왜 서로 싸우는지, 왜 서로 사랑하는지 다시 말해 우리가 왜 이 모양으로 살아가고 있는지를 매우 명확하게 알게 된다. 그래서 허무하기보다는 장막이 걷혀서 세상을 다시 볼 수 있게 된다. 그 어떤 철학이나 심리학보다 세상과 인간을 명확하게 설명해주는 게 아닌가.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;'인간이란 무엇인가?'라는 물음에 이제는 답할 수 있게 되었다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거부터 우리는 '생명에는 의미가 있는가?', '우리는 무엇 때문에 존재하는가?', '인간이란 무엇인가?' 등과 같은 심오한 질문을 하곤 했다. 과학적으로 답하지 못했기 때문에 그때마다 종교나 미신에 의지할 수밖에 없었다. 동물학자 심슨은 이 세 가지 중 마지막 질문을 제기하면서 이렇게 말했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&quot;내가 강조하고 싶은 점은, &lt;br /&gt;1859년 이전에 이 문제에 답하고자 하던 시도들은 모두 가치가 없으며, &lt;br /&gt;오히려 그것들을 완전히 무시하는 편이 나을 것이라는 점이다.&quot;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1859년은 찰스 다윈의 《종의 기원》이 출간된 해다. 종의 기원 덕분에 우리는 인류를 비롯한 동물의 기원을 설명할 수 있게 되었다. '인간이란 무엇인가?'라는 질문에 우리는 &lt;b&gt;'인간은 유전자가 만들어 낸 기계다.'&lt;/b&gt;라고 답할 수 있게 되었다. 1859년 이전에 '인간이란 무엇인가?'에 대해 답하려고 시도했던 모든 철학적 고찰들은 더 이상 의미가 없어진 셈이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciB58g/btsFfvmUfPY/8ofDjucLmsbtghIT5HWeSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciB58g/btsFfvmUfPY/8ofDjucLmsbtghIT5HWeSk/img.png&quot; data-alt=&quot;《종의 기원》 초판&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciB58g/btsFfvmUfPY/8ofDjucLmsbtghIT5HWeSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciB58g%2FbtsFfvmUfPY%2F8ofDjucLmsbtghIT5HWeSk%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;500&quot; height=&quot;382&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;《종의 기원》 초판&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스스로를 복제하는 유전자가 만든 생존 기계&lt;/h3&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;자기 복제자는 계속 살아남기 위해 자신을 담을 그릇, 곧 운반자(vehicle)까지 만들기 시작했다. 살아남은 자기 복제자는 자기가 들어앉을 생존 기계를 스스로 만든 것이다. 최초의 생존 기계는 아마도 보호용 외피 정도였을 것이다. 그러나 더 우수한 생존 기계를 갖춘 새로운 경쟁 상대가 나타나면서 살아가기가 점점 더 어려워졌다. 이 같은 환경에서 생존 기계는 더 커지고 정교해졌다. 이 과정은 누적되고 계속 진행되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘날 자기 복제자는 덜거덕거리는 거대한 로봇 속에서 바깥세상과 차단된 채 안전하게 집단으로 떼지어 살면서, 복잡한 간접 경로로 바깥세상과 의사소통하고 원격 조정기로 바깥세상을 조종한다. 그들은 우리 모두들의 몸 안에 있다. 그들은 우리의 몸과 마음을 창조했다. 그리고 그들이 살아 있다는 사실이야말로 우리가 존재하는 궁극적인 이론적 근거이기도 하다. 그들은 유전자라는 이름으로 계속 나아가며, 우리는 그들의 생존 기계다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 '우리'란 인간만이 아니다. 모든 동식물, 박테리아, 심지어 바이러스도  포함된다. 생존 기계는 종류에 따라 외형이나 체내 기관이 매우 다양하다. 그렇지만 생존 기계의 기본적인 화학 조성은 거의 비슷하다. 특히 그들이 갖고 있는 유전자는 박테리아에서 코끼리에 이르기까지 기본적으로 모두 같은 종류의 분자다. 우리 모두는 같은 종류의 자기 복제자, 즉 DNA라고 불리는 분자를 위한 생존 기계다.&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;600&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbZ7Br/btsFhgvyxdt/1V0jKMCSWBrXKH5T36uOGk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbZ7Br/btsFhgvyxdt/1V0jKMCSWBrXKH5T36uOGk/img.jpg&quot; data-alt=&quot;출처 : https://harifromtheworldday.wordpress.com/2012/08/01/many-kinds-of-plants-and-animals/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbZ7Br/btsFhgvyxdt/1V0jKMCSWBrXKH5T36uOGk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbZ7Br%2FbtsFhgvyxdt%2F1V0jKMCSWBrXKH5T36uOGk%2Fimg.jpg&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;600&quot; height=&quot;437&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://harifromtheworldday.wordpress.com/2012/08/01/many-kinds-of-plants-and-animals/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우리는 언젠가 죽지만, 유전자는 불멸한다.&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;생존 기계인 우리는 수십 년을 살 수 있다. 하지만 유전자의 기대 수명은 10년 단위가 아닌, 1백만 년 단위로 측정되지 않으면 안 된다. 유전자는 불멸의 존재다. 유전자들은 자기 복제자이고 우리는 그들의 생존 기계다. 우리의 임무를 다하면 우리는 폐기된다. 그러나 유전자는 지질학적 시간을 살아가는 존재이며, 영원하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUJxAc/btsFgQjzaZq/PIzXOBp5NPHu9dbBQmBLnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUJxAc/btsFgQjzaZq/PIzXOBp5NPHu9dbBQmBLnk/img.jpg&quot; data-alt=&quot;출처 : 픽사베이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUJxAc/btsFgQjzaZq/PIzXOBp5NPHu9dbBQmBLnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUJxAc%2FbtsFgQjzaZq%2FPIzXOBp5NPHu9dbBQmBLnk%2Fimg.jpg&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;500&quot; height=&quot;299&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 픽사베이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우리가 이렇게 살아가는 이유는?&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;그러나 체스 게임이 그렇듯이 생명체가 맞닥뜨릴 수 있는 우발적 사건이란 수없이 많기 때문에 도저히 그 모든 걸 예상하진 못한다.&amp;nbsp;북극곰 유전자는 곧 태어날 자신들의 생존 기계가 미래에 추위를 느낄 것이라고 예측할 수 있다. 그렇다고 해서 유전자가 예언을 하는 건 아니다. 유전자는 생각을 전혀 하지 않는다. 그저 두꺼운 모피를 만들 뿐이다. 왜냐하면 이것이 그 유전자가 과거의 몸속에서 항상 해 왔던 일이고, 또 그 유전자가 아직도 유전자 풀 속에 존재하는 이유이기도 하기 때문이다. 만약 북극 기후가 갑자기 바뀌어 열대 사막과 같은 환경처럼 된다면, 유전자의 예측은 빗나가고 그 유전자는 대가를 치를 것이다. 아기 북극곰은 죽고 그 속의 유전자도 사라질 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 세상에서 예측이란 불확실하기 마련이다. 생존 기계가 내리는 결정은 모두 도박이다. 따라서 유전자가 할 일은 생존 기계의 뇌가 평균적으로 이득이 되는 결정을 내릴 수 있도록 뇌에 미리 프로그램을 짜 놓는 일이다.  프로그램은 생존 기계에게 다음과 같은 지령을 내릴 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&quot;여기에 달콤한 것, 오르가슴, 따스한 기후, 방실거리는 아이 등 보상이라고 불릴 만한 것들의 목록이 있다. 그리고 여러 가지 고통, 구역질, 공복, 우는 아이 등 불쾌한 것들의 목록이 있다. 만약 당신이 무엇인가를 한 뒤에 불쾌한 것 중 하나가 발생한다면 다시는 그것을 하지 마라. 그러나 좋은 것 중 하나가 생기면 그것을 반복하라.&quot;&lt;/blockquote&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우리에게는 우리의 창조자에게 대항할 힘이 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 지구에서는 우리 인간만이 유일하게&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이기적인 자기 복제자의 폭정에 반역할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아주 단순한 예를 들자면, 달콤한 걸 먹고 싶지만 참는 것도 유전자의 폭정에 반하는 행동이다. 결혼을 하지 않거나 아이를 갖지 않는 행태들도, 하기 싫은 운동을 기어이 해내고야 마는 행동 등도 모두 마찬가지다. 적어도 인간은 아무런 자유 의지가 없는 생존 기계는 아니라는 말이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;같은 종인 우리끼리 서로 싸우고 경쟁하는 이유는?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 종의 생존 기계는 다양한 방법으로 다른 생존 기계에 영향을 준다. 그들은 포식자와 피식자 관계일 수도, 기생자와 숙주 관계일 수도, 희소 자원을 놓고 싸우는 경쟁 관계일 수도 있다. 그런데 같은 종의 생존 기계끼리는 더 직접적으로 서로의 생활에 영향을 미친다. 여러 이유가 있는데, 그 가운데 하나는, 자기 종에 속하는 개체군의 반은 잠재적으로 교미 상대이며, 또한 잠재적으로 자기의 자손을 낳고 열심히 길러 줄 부모가 될 개체이기 때문이다. 또 다른 이유는 같은 종의 구성원끼리는 생활에 필요한 모든 자원을 두고 직접 경쟁하는 상대이기 때문이다. 지빠귀와 두더지는 지렁이를 두고 다투겠지만, 같은 지빠귀끼리는 지렁이뿐만 아니라 다른 모든 것을 놓고 싸운다. 우리들끼리 서로 싸우고 경쟁하는 이유이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 동물들이 기회 있을 때마다 동종의 경쟁자를 죽이지 않는 이유는 무엇일까? 앞뒤 재지 않고 싸우면 이득보다 손실이 클 수 있기 때문이다. B와 C가 모두 나의 경쟁자라고 하자. 마침 B를 만났다면 그를 죽이는 게 당연해보인다. 그렇지만 C는 내 경쟁자이기도 하지만 B와도 경쟁 관계가 아닌가. 내가 B를 죽이면 잠재적으로 C의 경쟁자 하나를 제거해 C에게 이익을 주는 셈이다. B를 살려두면 B와 C가 다투거나 싸울 것이므로 결국 나 자신에게는 간접적으로 이익이 될 것이다. 함부로 경쟁자를 죽이려고 하는 것에는 뚜렷한 이익이 없다는 말이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 유전자가 이기적이라고 말하는가?&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참고로, 여기서 '이기적'이라는 말은 비유적인 표현이다. 유전자가 정말 이기적인 주관을 갖는 실체는 아니다. 다만 비유적으로 이해하기 쉽게 일시적으로나마 유전자가 지적 판단력이나 모종의 선택의 자유를 갖는다고 생각하자는 표현일 뿐이다. 이러한 태도야말로 《이기적 유전자》를 읽을 때 가져야 할 올바른 태도라고 도킨스는 말한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;《이기적 유전자》는 독단의 잠에서 깨게 만들어주는 책이라고 생각한다.&lt;/p&gt;</description>
      <category>책과 사유</category>
      <category>도킨스 이기적 유전자</category>
      <category>생존 기계</category>
      <category>생존기계</category>
      <category>유전자와 생존 기계</category>
      <category>이기적 유전자 설명</category>
      <category>이기적 유전자 요약</category>
      <category>이기적 유전자 해설</category>
      <category>진화 생물학 요약</category>
      <category>진화생물학 도킨스</category>
      <category>진화생물학 이기적 유전자</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/318</guid>
      <comments>https://bkshin.tistory.com/entry/%EB%A6%AC%EC%B2%98%EB%93%9C-%EB%8F%84%ED%82%A8%EC%8A%A4-%EC%9D%B4%EA%B8%B0%EC%A0%81-%EC%9C%A0%EC%A0%84%EC%9E%90#entry318comment</comments>
      <pubDate>Tue, 27 Feb 2024 23:42:35 +0900</pubDate>
    </item>
    <item>
      <title>고려대학교 AI 야간대학원 첫 학기를 마치며</title>
      <link>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%B2%AB-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;'고려대학교 AI 야간대학원 면접 후기'에 관해 쓴 &lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%A9%B4%EC%A0%91-%ED%9B%84%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;지난번 포스팅&lt;/a&gt;에 이어 이번에는 첫 학기 수강 경험에 대해 기록해 보겠습니다. AI 특수대학원(야간대학원) 생활이 어떤지 궁금한 분들을 위해 작성했습니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;직장과 병행하며 대학원을 다니기 힘들지 않나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힘들지 않았습니다. 대학원 다니기 전에도 어차피 전 퇴근 후 집에서 공부를 하든 프로젝트를 하든 무언가를 항상 했습니다. 그걸 집에서 하느냐 학교에서 하느냐만 달라진 상황이라 저는 별로 힘들진 않았습니다. 그렇지만 집에 늦게 들어온다는 심리적 피로감이 살짝 있긴 합니다. 2교시 수업까지 끝나고 집에 오면 11시가 넘기 때문이죠. 야근 끝나고 집에 오는 느낌을 매주 한두 번씩 느낄 수 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;수업 시작 시간과 관련해서는 퇴근 후 6시 45분까지 고려대 강의장에 도착할 수 있다면 큰 무리 없이 다니실 수 있습니다. 지난 포스팅에서도 썼다시피 첫 수업 시작 시간이 저녁 6시 45분입니다. 많은 분들이 6시 40분~45분에 딱 맞춰오더군요. 45분이 조금 넘어서 허겁지겁 오는 분들도 몇 분 계셨고요. 교수님께서도 직장인이기 때문에 어쩔 수 없다는 걸 아셔서, 정확히 45분까지 와야만 출석 인정을 해주는 건 아니었습니다. 출석 체크에 대한 융통성은 있는 편입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주제에서 벗어난 얘기지만, 매주 수업 시작 전에 과학도서관에서 대학(원)생들 사이에 같이 끼어 잠시 공부를 하는데 그때 상황이 재밌으면서도 좋더라고요. 대학생 때 생각도 나고, 그 분위기가 참 좋습니다. 치열한 학구열 사이에서 전 약간 느슨한(?) 마음가짐으로 관망하며 공부하는 여유를 갖곤 하죠.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;평소에 과제하거나 공부하는 데 시간을 얼마나 투자해야 하나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배경지식이 얼마나 있는지에 따라 다르겠습니다. 이미 코딩도 잘하고 AI를 많이 아는 분이라면 그리 부담스럽지 않을 겁니다. 최근 5~6년 내에 컴퓨터공학과를 졸업한 분이라면 수월할 거에요. '적당히 졸업할 정도만 해야지'라고 생각하시는 분도 뭐 적당히 졸업할 정도로만 시간을 투자하면 되겠죠. 만약 비전공자이거나 배경지식이 조금 부족한 분이라면 따라가기 제법 벅찼을 거라고도 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭐든 상대적이겠지요. 저는 공부하는 데 많은 시간을 투자했어요. 필수는 아니지만, 다시 말해 시험과는 관련 없지만 개인적으로 궁금해 이거 저거 찾아보며 공부하느라 시간을 꽤 썼습니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;한 과목당 몇 명 정도 수강하나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연하게도 과목마다 다릅니다. 제가 들은 세 과목별 인원수는 약 70명, 40명, 40명이었습니다. 70명이 들은 수업은 인기가 많은 과정이고, 평균 30~40명 되는 것 같습니다. 10명 정도 수강하는 과목도 있긴 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;학업 외적인 요소들은 어떤가요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생회에 들어야 모든 행사나 네트워킹에 참여할 수 있습니다. 단톡방도 학생회끼리 만들기 때문에 학생회를 들지 않으면 '완벽한' 아웃사이더가 됩니다. 아웃사이더가 되기 두렵다면 학생회에 드시는 걸 추천해요. 그래야 인맥도 쌓고 모르는 게 있으면 물어보며 도움을 얻을 수 있거든요. 그래서 상당수가 학생회에 참여하는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 학생회에 참여하지 않았어요. 신입생 오티 때 학생회장님께서 학생회에 들면 좋은 점들을 설명해주셨는데, 한 10가지가 되더군요. 각종 회식, MT, 선후배와의 만남, 단체 야잠 제작, 다른 학교와의 네트워킹, 졸업 사진 촬영, 과목별 카톡방 개설 등이었습니다. 카톡방 빼고는 다 제가 원하는 활동들이 아니라 자발적으로 학생회를 들지 않았습니다(미가입자에게는 학생회에 가입할 걸 권장한다는 연락이 학생회장단으로부터 세 차례 정도 옵니다). 그래서 전 동기가 누군지, 심지어 몇 명인지도 모릅니다. 카톡방도 당연히 없고요. 카톡방이 없는 건 좀 아쉽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순전히 공부가 목적인 사람이라면 저처럼 학생회를 들지 않아도 전혀 상관이 없습니다. 그렇지만 학교 생활을 다이나믹하게 하고 싶다거나 네트워킹에 관심이 있다면 참여하시는 것도 좋겠죠?&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;다닐만한 가치가 있다고 보나요?&lt;/h3&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;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%A9%B4%EC%A0%91-%ED%9B%84%EA%B8%B0&quot;&gt;지난 포스팅&lt;/a&gt;에서 쓴 글입니다).&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;AI를&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;nbsp;하고&amp;nbsp;싶었습니다.&amp;nbsp;AI&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;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;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;있었죠.&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추측건대 순전히 저와 같은 목적으로 특수대학원에 지원하는 경우가 많을 것 같진 않습니다. 학문을 향한 갈망보다는 좀 더 실용적인 목적을 가지고 진학하시려는 분이 더 많지 않을까 싶습니다. 그러니 참고만 해주세요.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;특수대학원도 논문이 필수인가요?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;요즘 특수대학원은 논문 없이 졸업하는 트랙이 많은 것 같습니다. 고려대학교는 논문 트랙과 교과 트랙으로 나뉩니다. 논문 트랙은 논문을 쓰는 대신 과목을 상대적으로 적게 수강하는 트랙입니다. 교과 트랙은 논문을 쓰지 않지만 대신 과목을 더 많이 들어야 하는 트랙입니다. 둘 중 원하는 트랙을 선택할 수 있어요. 본격적으로는 3학기 즈음부터 선택하게 됩니다. 다만 일반대학원과 달리 소속 연구실이 없고, 지도교수님도 특수대학원생을 세심하게 케어해 주기 어려운 환경이다보니 감안하셔야 합니다. 그래도 IT 업종 재직자이거나 회사 업무와 관련해서 논문을 쓰실 수 있다면 얼마든지 가능하겠죠. 그런데 제가 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;과목별 후기&lt;/h3&gt;
&lt;p 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;고급기계학습&lt;/h4&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;이번 학기에 수강한 세 과목 가운데 가장 마음에 드는 과목이었습니다. 교수님께서 Computer Vision의 기법과 모델 아키텍처를 설명하는 걸 넘어 더 상세히 강의해 주셨습니다. 기본적으로 어떤 기법이나 모델 아키텍처를 자세히 설명해 주었습니다. &lt;span&gt;이어서 그 기법이나 모델의 장점과 단점을 짚어주었고요. 그 단점(한계)을 극복하기 위해 만든 모델은 무엇인지 이어갔죠. 이런 방식으로 AlexNet부터 NeRF까지 설명을 해주셨습니다. 개별 모델이나 기법에 대한 독립적인 지식을 터득하는 걸 넘어, 딥러닝 컴퓨터 비전의 역사 흐름에 따라 모델이나 기법의 논리적인 탄생 목적까지 알게 된 거죠. 매 수업마다 1시간 반 동안 쉴 틈 없이 빠른 속도로 필기를 했습니다. 거의 매일 2~3개씩 질문도 했고요. 그러다보니 강의 노트에 필기가 빼곡히 되어 있었습니다. 정말 재밌고 의미있는 수업이었어요. &lt;/span&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;&lt;span style=&quot;background-color: #fafafa; color: #000000; text-align: left;&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;b&gt;Model Architecture&lt;/b&gt; : AlexNet, VGG, ResNet, seqence-to-sequence with RNN, 어텐션, 셀프 어텐션, 트랜스포머, ViT(Vision Transformer), Swin-Transformer&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Object Detection&lt;/b&gt; : R-CNN, Fast R-CNN, Faster R-CNN, YOLO, DETR&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Segmentation&lt;/b&gt; : Semantic Segmentation, Instance Segmentation, Panoptic Segmentation, Mask R-CNN, MaskFormer&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Self-Supervised Learning&lt;/b&gt; : SimCLR, Memory Bank, MoCo, SimSiam, SiT, BEIT, MAE(Masked AutoEncoder), CLIP&lt;/li&gt;
&lt;li&gt;&lt;b&gt;3D Computer Vsion&lt;/b&gt; : Monocular Depth Estimation, PointNet, Pixel2Mesh, Mesh R-CNN, NeRF&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;필수는 아니었지만, 시간이 될 때마다 위 모델들의 논문을 읽어봤습니다. 세어 보니 10개 가량 본 것 같습니다. 트랜스포머 논문인 Attention is all you need을 비롯해서 ViT, Swin Transformer, DETR, SimCLR, MAE(Masked AutoEncoder), BEIT, pixel2mesh, SAM(Segment Anything) 등의 논문을 읽었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;일주일에 1시간 반 수업을 들어서 뽑을 수 있는 최대치를 얻은 수업이었다고 생각합니다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;확률과 통계&lt;/h4&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학년 때 공학통계 I, II를 두 학기 동안 배웠습니다. 공학통계라서 실용적인 과목이었죠. 어떤 확률 분포를 따르는 어떠한 현상이 있을 때 그 현상에 대한 현황/결과/예측을 수식으로 풀어내는 방법을 배웠습니다. 대부분의 학부생과 마찬가지로 저도 학점에 연연했기 때문에 '왜(Why)'에는 별 관심이 없었고, '어떻게(How)'에만 관심이 있었죠. 이 개념이 왜 이렇게 되는지, 이 이론은 왜 이런 특성을 갖는지에는 관심이 없었어요. 그냥 문제를 잘 풀어 답을 맞히는 기계였죠. 그래서 당시 공학통계 수업이 재미없었습니다. 학부생 때도 '왜(Why)'에 관심을 기울였다면 질문도 많이 하며 재밌게 들었을 텐데 말이죠.&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;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;확률(Probability)이란 무엇인가요?&amp;nbsp;&lt;br /&gt;랜덤&amp;nbsp;변수(Random&amp;nbsp;Variable)란&amp;nbsp;무엇인가요?&amp;nbsp;&lt;br /&gt;랜덤&amp;nbsp;프로세스(Random&amp;nbsp;Process)란&amp;nbsp;무엇인가요?&lt;br /&gt;등등...&amp;nbsp;&lt;/blockquote&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;확률 수업이라면 응당 첫 번째 수업 때 확률이 무엇인지 알려주기 마련입니다. 그런데 이 수업에서는 확률이 무엇인지를 학기가 1/3 정도 지난 시점에 알려주었습니다. 왜냐하면 확률을 이해하려면 집합론(Set Theory)과 측도론(Measure Theory)을 알아야 하기 때문이었어요. 밑바닥부터 차곡차곡 기반을 쌓아 올린 뒤, '그래서 이게 확률이다!'라고 한 겁니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;혹시나 위 질문의 답이 궁금한 분이 있을 것 같아 설명하자면 이렇습니다.&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;확률(Probability)이란 표본 공간(Sample Space)의 시그마 필드(Sigma Field) 내에서 정의된 정규화된 측도(Normalized Measure)입니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처음부터 이렇게 설명하면 하나도 이해를 못하죠. 그래서 집합(Set)이란 무엇이고, 그 집합에서 정의된 시그마 필드(Sigma Field)란 무엇이고, 측도(Measure)란 무엇이고, 표본 공간(Sample space)이란 무엇인지 등을 알아가야 하는 겁니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 원론적인 내용은 제 흥미를 돋우었죠. 물론 일주일에 1시간 반씩 한 학기 배우는 거라 엄청 깊게 배우거나, 많은 분량을 배우는 건 아닙니다. 그래도 확률에 이렇게 수학적으로 엄밀한 개념이 있다는 사실을 알게 돼 꽤 재밌게 들었습니다. 관심이 있다보니 매주 예습/복습을 했고, 수업 때마다 질문을 3~4번 이상씩은 했었습니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;텍스트 마이닝&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;텍스트 마이닝의 단편적인 기법들을 배운 수업이었습니다. 실망스러웠어요. 위 두 수업과 비교해 남은 게 별로 없었죠. 그래도 수업을 열심히 듣고 과제도 성실하게 했지만, 결과적으로는 기대에 못미치는 수업이었습니다. 기록으로 남길 게 없네요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qkVKH/btsC84K47Q3/YlGCptK63lanDQttFN14fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qkVKH/btsC84K47Q3/YlGCptK63lanDQttFN14fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qkVKH/btsC84K47Q3/YlGCptK63lanDQttFN14fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqkVKH%2FbtsC84K47Q3%2FYlGCptK63lanDQttFN14fk%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;500&quot; height=&quot;112&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;111&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;b&gt;[update]&lt;/b&gt; &lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%91%90-%EB%B2%88%EC%A7%B8-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;다음 포스팅&lt;/a&gt;에 두 번째 학기를 마친 후기를 기록해두었습니다.&lt;/p&gt;</description>
      <category>회고</category>
      <category>AI 야간대학원 후기</category>
      <category>고려대 야간대학원 후기</category>
      <category>고려대 인공지능융합학과 후기</category>
      <category>고려대 특수대학원 인공지능</category>
      <category>고려대학교 AI 야간대학원</category>
      <category>고려대학교 AI 특수대학원</category>
      <category>고려대학교 인공지능 특수대학원</category>
      <category>고려대학교 인공지능융합학과 특수대학원</category>
      <category>연세대 AI 야간대학원 후기</category>
      <category>인공지능 야간대학원 후기</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/317</guid>
      <comments>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%B2%AB-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0#entry317comment</comments>
      <pubDate>Thu, 11 Jan 2024 23:55:49 +0900</pubDate>
    </item>
    <item>
      <title>고려대학교 AI 야간대학원 면접 후기</title>
      <link>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%A9%B4%EC%A0%91-%ED%9B%84%EA%B8%B0</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2023년 하반기부터 고려대학교 SW&amp;middot;AI융합대학원 인공지능융합학과에 다니고 있습니다. 고려대 SW&amp;middot;AI융합대학원은 특수대학원으로써 직장인을 위한 야간대학원이라고 보시면 됩니다. 일반대학원에 대한 후기는 많은데, 야간대학원에 관한 후기가 별로 없어서 자세히 적어보려고 합니다. 저도 지원할 당시 후기들을 찾아보려 했으나 몇 개 없더라고요. AI 야간대학원에 관심이 있는 직장인이 많은 것 같습니다. AI 야간대학원은 어떤 곳인지, 입학을 위해 어떻게 준비해야 하는지, 면접은 어떤지를 참고해 준비하시는 데 도움되시길 바라는 마음으로 기록했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;고려대 SW&amp;middot;AI융합대학원에선 무얼 배우나요?&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;학과 소개&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;특수대학원(야간대학원)인 고려대학교 SW&amp;middot;AI융합대학원은 3개의 학과로 이루어져 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;①&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;인공지능융합학과, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;②&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;빅데이터융합학과, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;③&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소프트웨어보안학과&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;소프트웨어보안학과는 말 그대로 보안과 관련된 학과입니다. 인공지능융합학과와 빅데이터융합학과가 비슷해보일 순 있겠지만 서로 다른 학과입니다. 인공지능융합학과는 AI에 더 포커스를 둔 학과입니다. 머신러닝, 딥러닝, 정보이론, 음성인식, 텍스트 마이닝, 인공지능 기반 보안/의료/예술 응용 등을 다루죠. 반면 빅데이터융합학과는 빅데이터를 어떻게 분석하고, 어떻게 활용/응용하는지를 배우는 학과입니다. 학과 소개에 따르면 빅데이터 수집, 가공, 마이닝, 분석, 예측 등을 위한 핵심 영역의 과정들로 구성되어 있다고 해요. 데이터마이닝, 확률/통계, 데이터베이스, 언어처리, 정보검색, 시각화, 기계학습 등을 배웁니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;저는 빅데이터보단 AI에 관심이 많아서 인공지능융합학과에 지원했습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;경쟁률&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;시기에 따라 다르겠지만 경쟁률이 약 6대1 정도 되는 것 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;지원한 이유가 무엇인가요?&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;AI를 더 깊게 다지고 싶어서 지원을 했어요. 석사 타이틀이 필요한 것도 아니었습니다. 정말 공부가 하고 싶었습니다. AI 관련 책도 쓰고 실무 프로젝트도 해왔지만, 그와는 별개로 '학문'에 대한 갈망(?)이 있었습니다. 요즘은 뭐 해외 유수 대학 석학들의 강의도 온라인으로 들을 수 있는 좋은 환경이어서 혼자서도 충분히 깊게 '학문'을 할 수 있겠지만, 제도화된 '교수-학생 간 강의'에 대한 열망이 있었죠.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;고민을 많이 했습니다. 가급적 서울대학교나 KAIST에 가고 싶었지만, 서울대학교는 야간대학원 자체가 없었고 KAIST는 대전이라  어려웠죠. 홍릉에 있는 KAIST 야간대학원은 MBA라서 제가 원하는 학과가 없었습니다. 조지아텍 OMSA와 같은 미국 데이터 사이언스 온라인 석사도 생각했었습니다. 그런데 지원자격이 토플 100점 이상이어서 그걸 준비하는 데도 몇 달이 걸리지 않을까 싶었습니다. 게다가 영어를 잘하지도 못해서 수업을 원활하게 따라가는 데 장벽이 있을 것 같았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;결국 차선책으로 연세대나 고려대를 생각했죠. 둘 다 AI 야간대학원이 있었어요. 회사와 집 사이 동선을 생각했을 때 고려대가 좀 더 가까워 고려대학교에 지원했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;지원 프로세스가 어떻게 되나요?&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모집 절차&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;고려대 홈페이지에 자세히 안내되어 있겠지만 간단히 말씀드리면, 모집 절차는 이렇습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;① 지원서 접수 &amp;amp; 전형료 납부 &amp;rarr; ② 서류 평가 &amp;rarr; ③ 구술 면접 &amp;rarr; ④ 최종 합격자 발표&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;지원서를 접수할 때 여러 서류를 제출합니다. 졸업증명서, 성적증명서, 재직(경력)증명서, 자격증 등을 내고 추가로 연구계획서를 제출하면 됩니다. 저는 이력서를 포함한 포트폴리오도 추가로 제출했습니다. 대학원에 따라 추가 서류를 내면 안 되는 곳도 있으니 다른 대학원에 지원하실 거면 잘 알아보고 제출하시면 됩니다. 제가 지원할 당시 고려대 SW&amp;middot;AI융합대학원에는 명시한 서류 이외의 서류를 제출하면 안 된다는 말이 없어서 추가 서류를 제출했습니다. 아울러, 전형료는 9만 5천원이었습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;지원 서류(연구계획서)&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;연구계획서를 어떻게 써야 할지 고민일 겁니다. 고려대에서는 연구계획서 양식이 있었어요. 연구계획서 양식에 있는 항목은 두 가지였습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;① 본인의 직업 또는 담당업무를 구체적으로 기재하세요.&lt;br /&gt;② 연구계획을 기재하세요.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;저는 한글 파일을 기준으로 ①번 항목은 1.5쪽, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;②번 항목은 2쪽 정도 썼습니다. 분량은 제한이 없었어요. 원하는 만큼 쓰면 되었죠. 회사 업무 외에도 개인적으로 한 AI 관련 활동이나 프로젝트도 썼습니다. 지원자가 많으니 어차피 면접관이 개개인의 연구계획서를 자세히 읽진 못할 겁니다. 그렇기 때문에 되도록 핵심 위주로 적었습니다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;연구계획서에는 해보고 싶은 연구 3가지를 썼습니다. 한 가지만 자세히 적어도 무방합니다. 그런데 생각나는 연구가 여러 개라 저는 3가지를 적었어요. 평소에 논문을 종종 보기 때문에 논문의 흐름과 비슷하게 썼죠.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;일반적인 논문 흐름은 ① Introduction(서론) &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;② Related Work(선행 연구)&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;③ Method(모델 아키텍쳐 or 방법론)&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;④ Experiments(실험)&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;⑤ Conclusion(결론) 순입니다. 완벽히 들어맞지 않더라도 대략 이런 흐름으로 하고 싶은 연구를 소개했습니다. 해당 연구를 조사하거나 방법론을 고민해보진 않았을 테니 당연히 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;② Related Work,&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;③ Method, &lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;④ Experiments를 쓰긴 어렵겠죠. 우선 ② Related Work와 관련해서는 잠깐이라도 선행 연구가 있는지 찾아보면 쓸 말이 많아지겠죠? 만약 선행 연구가 없다면 가장 좋고, 있더라도 '&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;이러한 선행 연구가 있지만 무엇 무엇을 통해 이러 이러한 모델(방법)을 설계(개발)해보고 싶다.'라고 적으면 될 것 같아요. 실제로 저도 그렇게 썼고요. 다음으로 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;③ Method,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;④ Experiments 관련해서는 구체적으로 쓰긴 어려우니 대략 '이런 식으로 해보겠다.' 정도면 충분해보입니다. 게다가 저는 ④ Experiments는 아예 적지 않았습니다. 방법론도 아직 모르는데 실험을 적긴 불가능하니까요.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 지원서를 제출하고 기다리면 구술 면접 안내가 옵니다. 서류 탈락은 없는 것 같았습니다. 지원한 모든 사람에게 면접 기회를 주는 것으로 보였습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;면접은 어땠나요?&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;면접 당일이 되었습니다. 검은색 정장에 넥타이, 구두까지 풀 장착했습니다. 2015년에 저희 회사 면접을 본 이후로 면접은 처음인데, 별로 긴장이 되진 않았습니다. 경쟁률이 세다는 건 알았지만 별 생각이 없었던 것 같아요.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;면접 대기실로 들어가니 대학원생으로 보이는 2명이 참석 명단을 체크했습니다. 아주 편한 반팔 반바지 차림의 대학원생이었습니다. 진행 요원이라기 보다는 억지로 끌려온 느낌이라 표정도 태도도 심드렁해보였습니다. 실제로 억지로 차출됐을 테니 이해는 갑니다. 그 대학원생들의 잘못은 아니죠 ^^; 어찌 되었든 '학교에서 면접자를 대하는 마음이 이렇구나'라는 생각에 면접장의 첫 인상이 썩 좋진 않았어요.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;꽤나 많은 지원자가 넓은 강의장에 모여 있었습니다. 나이대도 20대 ~ 50대까지 다양했죠. 평균 연령은 30대 중후반쯤 되지 않을까 싶었습니다. 대체로 정장을 입었지만 캐주얼하게 입은 지원자도 더러 있었습니다. 반드시 정장을 입을 필요는 없어보였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;드디어 면접 시간이 됐습니다. 면접장은 두 개가 있었는데, 하나는 인공지능융합학과 면접장이고, 다른 하나는 빅데이터융합학과 면접장인 것 같았습니다. 소프트웨어보안학과는 지원자가 많지 않으니 둘 중 하나에서 같이 보지 않았을까 싶었어요. 저는 지원 번호가 앞쪽이라서 가장 처음 면접을 봤습니다. 교수 2명에 지원자 5명이 면접을 봅니다. 면접 시간은 15분 ~ 20분 정도고요. 우선 짧게 자기소개를 요청했습니다. 저를 포함한 5명 모두가 준비해온 자기소개를 마쳤죠. 자기소개는 형식상하는 거라 생각했지만 그래도 자기소개와 지원서를 바탕으로 후속 질문을 했습니다. 후속질문으로는 대개 업무와 연관된 질문이었습니다. 자기소개와 후속질문까지 해서 모두에게 질문 2개씩을 한 상황입니다. 여기까지는 5명 모두가 손쉽게 잘 대답했죠.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이어서 확률통계, 선형대수학 질문을 했어요. 저는 면접 전에 서울대학교 류근관 교수의 통계학, 이상엽 선생님의 선형대수학 강의를 각 2번씩 듣고 와서 질문에 쉽게 답할 수 있었습니다(무료 온라인 강의인데 포스팅 말미에 링크 달아두었습니다). 안타깝게 5명 중 3명은 대답을 제대로 못했습니다. 그도 그럴 것이 어떤 개념에 대한 명확한 정의를 묻는 질문이어서 답하기가 쉽진 않았을 듯합니다. 대강의 의미는 알지라도 면접 자리에서 개념을 명확하게 말로 표현하긴 쉽지 않으니 말이죠. 다행히도 저는 명확한 개념들을 사전에 숙지하고 가서 수월히 답할 수 있었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;한 사람당 질문 4개를 마치고 면접은 끝났습니다. 면접 시작할 때도 그렇고 중간에도 그렇고, 면접관 교수님께서 시간이 충분하지 않으니 답을 짧게 할 걸 요구했습니다. 지원자가 너무 많으니 그런 것 같아요.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;체감상 첫 번째, 두 번째 질문은 당락에 크게 영향을 주는 것 같지 않고, 세 번째, 네 번째 질문이 중요한 것 같았습니다. 결과적으로 전공지식(확률통계, 선형대수학)에 관해 제대로 답하지 못한 3명은 떨어지고, 저를 포함해 잘 답한 2명은 합격했기 때문이죠. 전공 지식을 제대로 알고 있는지와 서류를 종합해 평가하지 않을까 싶습니다. 면접만으로 평가하기엔 시간이 너무 짧기도 하니까요. 그저 제 추측이니 참고만 하시기 바랍니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;제게 물어본 확률통계, 선형대수학 면접 질문은 다음과 같습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;면접관 질문 :&lt;/b&gt; 사건 A와 B가 독립일 조건은 무엇인가요?&amp;nbsp;&lt;br /&gt;&lt;b&gt;제 답변 :&lt;/b&gt; P(A &amp;cap; B) = P(A) P(B)이면 A와 B가 독립입니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;면접관 질문 :&lt;/b&gt; Rank가 무엇인가요?&lt;br /&gt;&lt;b&gt;제 답변 :&lt;/b&gt; 열공간은 어떤 행렬의 열벡터들로 생성된 공간이고, 행공간은 행벡터들로 생성된 공간입니다. 열계수는 열공간의 차원이고, 행계수는 행공간의 차원입니다. 계수정리에 의해 열계수와 행계수는 같습니다. 즉, col-rank와 row-rank는 같습니다. 이 값, 다시 말해 해당 행렬의 행공간과 열공간의 공통 차원을 계수, Rank라고 합니다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;둘 다 사전에 통계학, 선형대수학을 복습하며 익힌 내용이라 운이 좋았죠. 미리 공부 안 해 갔으면 답을 제대로 못했을 수도 있습니다. 학부 때 배운 내용일지라도 오랜 시간 지났으니 다 까먹죠. 반드시 전공 유관 이론/개념들을 공부하고 면접보시기 바랍니다. 위 질문 외에도 다른 면접자에게 한 질문들도 몇 개 기억나는데, 면접 문제 유출(?)의 우려가 있어서 공개적으로 적진 않겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;면접 후 한 달 정도 지나고 최종 합격 결과가 나왔습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;수업시간과 학비는?&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;수업시간&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;직장인을 위한 대학원이라 첫 수업은 6시 45분부터 시작합니다. 1교시는 6시 45분 ~ 8시 15분, 2교시는 8시 20분 ~ 9시 50분입니다. 1교시와 2교시 수업의 건물이 다르면 1교시가 끝나고 바로 다음 강의장으로 가야 합니다. 화장실만 잠깐 다녀올 수 있을 정도로 쉬는 시간이 타이트합니다. 그래도 이게 더 낫더군요. 쉬는 시간을 짧게 하더라도 빨리 끝나는 게 나으니까요.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;학비&amp;nbsp;&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;총 5학기 과정이고 학비는 한 학기에 700만원 정도 됩니다. 입학등록금은 100만원 좀 넘는 금액입니다. 다 합쳐서 3,600만원 정도된다고 보시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EC%B2%AB-%ED%95%99%EA%B8%B0%EB%A5%BC-%EB%A7%88%EC%B9%98%EB%A9%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;다음 포스팅&lt;/a&gt;에서는 첫 학기를 마친 후기를 올리겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;통계 &amp;amp; 선형대수 학습을 위한 무료 온라인 강의 링크&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=b8tTQ1EZzho&amp;amp;list=PLUZHqQZ1oa95tRaispqWi3RJ5KqrSEY2M&amp;amp;index=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;서울대학교 류근관 교수의 통계학&lt;/a&gt; (약 22시간 분량)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=525w2Zqh13M&amp;amp;list=PL127T2Zu76FuVMq1UQnZv9SG-GFIdZfLg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이상엽 선생님의 선형대수학&lt;/a&gt; (약 18시간 분량)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>회고</category>
      <category>AI 야간대학원</category>
      <category>AI 특수대학원</category>
      <category>고려대 AI 대학원</category>
      <category>고려대 야간대학원</category>
      <category>고려대 특수대학원</category>
      <category>고려대학교 AI 야간대학원</category>
      <category>야간대학원 면접 후기</category>
      <category>연세대 AI 야간대학원</category>
      <category>인공지능 야간대학원</category>
      <category>직장인 야간대학원 면접</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/315</guid>
      <comments>https://bkshin.tistory.com/entry/%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90-AI-%EC%95%BC%EA%B0%84%EB%8C%80%ED%95%99%EC%9B%90-%EB%A9%B4%EC%A0%91-%ED%9B%84%EA%B8%B0#entry315comment</comments>
      <pubDate>Mon, 8 Jan 2024 00:02:09 +0900</pubDate>
    </item>
    <item>
      <title>[제롬 데이비드 샐린저] 호밀밭의 파수꾼을 다시 읽으며..</title>
      <link>https://bkshin.tistory.com/entry/%EC%A0%9C%EB%A1%AC-%EB%8D%B0%EC%9D%B4%EB%B9%84%EB%93%9C-%EC%83%90%EB%A6%B0%EC%A0%80-%ED%98%B8%EB%B0%80%EB%B0%AD%EC%9D%98-%ED%8C%8C%EC%88%98%EA%BE%BC%EC%9D%84-%EB%8B%A4%EC%8B%9C-%EC%9D%BD%EC%9C%BC%EB%A9%B0</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제작 호밀밭의 파수꾼&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1980년 12월 8일 밤 11시, 비틀즈 멤버인 존 레논이 자신의 팬이었던 마크 채프먼의 총에 살해당했다. 살해 직후 마크 채프먼은 도망갔을까? 아니다. 그는 존 레논을 살해한 뒤 살해 현장에서&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; 책을 읽었다. 바로&amp;nbsp;&lt;/span&gt;『호밀밭의 파수꾼』&lt;/span&gt;을 말이다. 경찰에 체포되는 순간까지도 책을 손에서 놓지 않았다. 『호밀밭의 파수꾼』은 당시 이미 유명한 작품이었지만 이 사건 이후도 더 유명세를 떨쳤다.&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;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;'청소년에게 읽히지 말아야 할 책', '살인자를 키우는 책'과 같은 수식어가 따라다니기도 했다. 비도덕적이라는 이유로 당시 논란이 많았다. 한편, 현대 미국 문학사에서 빼놓을 수 없는 걸작으로 평가받고 있다. 특히, 노벨상 수상작가인 윌리엄 포크너는 『호밀밭의 파수꾼』을 20세기 최고의 소설이라고 극찬한 바 있다. 이렇듯 이 소설은 1951년에 출판되어 오늘날까지 문제작으로 남아있다.&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-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6tt3y/btsro8xDD8y/bkTTKf21NmPm9JJ32iNP60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6tt3y/btsro8xDD8y/bkTTKf21NmPm9JJ32iNP60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6tt3y/btsro8xDD8y/bkTTKf21NmPm9JJ32iNP60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6tt3y%2Fbtsro8xDD8y%2FbkTTKf21NmPm9JJ32iNP60%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;357&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 다섯 번 읽었는데, 원서로 2번, 공경희 번역본으로 2번, 정영목 번역본으로 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;내친김에 이번에 샐린저의 다른 작품 『프래니와 주이』와 김성곤 작가의 『J.D. 샐린저와 호밀밭의 파수꾼』도 읽었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;작품 요약&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;『호밀밭의 파수꾼』의 주인공은 16살인 홀든 콜필드다. 그는 가식을 무척 싫어한다. 홀든이 다니던 학교는 가식과 속물로 넘쳐나던 곳이다. 당시 하스라는 교장이 있었는데, 홀든은 그 교장이야 말로 가식이 넘치는 사람이라고 말한다. 학생들의 부모 중 촌티가 나는 사람과는 짧은 인사만 하고, 그렇지 않은 부모와는 오랫동안 얘기를 하기 때문이다. 홀든은 이런 가식이나 속물을 참지 못한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;내가 엘크턴 힐스를 떠난 가장 큰 이유 중 하나는 가식에 둘러싸여 있었다는 거였다. 그게 다다. 예를 들어 그 교장, 미스터 하스라고 있는데, 그는 내 평생 만나본 가장 가식적인 놈이었다. 우리의 서머보다 열 배는 심했다. 예를 들어 일요일이면 우리의 하스는 학교로 차를 몰고 오는 모든 아이의 부모와 악수를 하고 돌아다녔다. 다만 어떤 애의 부모가 별거 아니고 웃기게 생긴 그딴 부모라면 얘기가 달라졌다. 그가 내 룸메의 부모를 어떻게 했는지 봤어야 하는데. 그러니까 어떤 애의 어머니가 좀 뚱뚱하거나 촌티가 나거나 그러면, 또 어떤 애 아버지가 어깨가 아주 큰 그런 양복을 입고 촌스러운 흑백 구두를 신는 그런 사람이라면 우리의 한스는 그냥 악수를 하고 가식적인 미소를 지어 준 다음 얼른 다른 애 부모한테 가서 뭐 한 삼십 분쯤 얘기를 했다. 나는 그런 건 참지 못한다. 돌아 버린다. 너무 우울해져서 돌아버리고 만다. 나는 그 빌어먹을 엘크턴 힐스가 싫었다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위선자들에게 환멸을 느껴 홀든은 결국 학교를 떠난다. 학교를 떠난 뒤 택시를 탔는데, 택시 기사와 다음과 같은 대화를 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&quot;보세요, 여기요. 센트럴 파크 사우스 바로 옆에 있는 그 호수의 오리들 아시죠? 혹시 그게 어디로 가는지 아세요, 그 오리들이요, 거기가 다 얼어 버리면? 아시나요, 혹시?&quot; 나는 그것이 백만분의 일의 혹시에 불과하다는 것을 깨달았다. &lt;br /&gt;그는 몸을 돌려 미치광이를 보듯 나를 보았다. &quot;지금 뭐 하는 거요, 친구? 나한테 장난쳐?&quot;&lt;br /&gt;&quot;아니요, 그냥 흥미가 있어서요, 그뿐입니다.&quot;&lt;br /&gt;그는 더 말을 하지 않았고, 그래서 나도 하지 않았다.&lt;/blockquote&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;blockquote data-ke-style=&quot;style3&quot;&gt;&quot;변호사는 괜찮아, 내 생각으로는. 하지만 나한테는 그게 매력이 없어. 그러니까 늘 죄 없는 사람의 목숨이나 그런 걸 구해주고 돌아다니거나 그러면 괜찮겠지만 변호사가 되면 그런 일을 하는 게 아니야. 하는 일이라고는 돈을 많이 벌고 골프를 치고 브리지 게임을 하고 차를 사고 마티니를 마시고 거물처럼 보이는 거뿐이야. 또 게다가. 설사 실제로 사람들 목숨이나 그런 걸 구하며 돌아다닌다고 해도 자기가 정말로 사람들 목숨을 구하고 싶어서 그렇게 한 건지, 아니면 정말로 하고 싶은 건 끝내주는 변호사가 되어 빌어먹을 재판이 끝나면 법정에서 모두가, 기자와 모든 사람이 등을 두드리며 축하해 주는 게, 더러운 영화에서처럼 그렇게 해주는 게 좋아서 그렇게 한 건지 어떻게 알겠어? 자기가 그러는 게 가식이 아니란 걸 어떻게 알겠어? 여기서 문제는 그걸 모른다는 거야.&quot;&lt;/blockquote&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;blockquote data-ke-style=&quot;style3&quot;&gt;&quot;나는 모든 어린 꼬마들이 호밀밭이나 그런 커다란 밭에서 어떤 놀이를 하는 모습을 계속 그려 봐. 어린 꼬마 수천 명, 주위에 아무도 없고(그러니까 어른은 없고) 나를 빼면. 그런데 나는 어떤 미친 절벽 가장자리에 서있어. 만일 꼬마들이 절벽을 넘어가려 하면 내가 모두 붙잡아야 해. 그러니까 꼬마들이 어디로 가는지 보지도 않고 마구 달리면 내가 어딘가에서 나가 꼬마를 붙잡는 거야. 그게 내가 온종일 하는 일이야. 나는 그냥 호밀밭의 파수꾼이나 그런 노릇을 하는 거지. 나도 그게 미쳤다는 거 알아. 하지만 그게 내가 진짜로 되고 싶은 유일한 거야.&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀든은 가식과 허영, 속물이 넘쳐나는 세상에 염증을 느낀다. 그런 것들에 물들지 않은 순수한 아이들을 지키는 파수꾼이 되고 싶어 한다. 아이들이 절벽을 넘어가려 하면 붙잡는 일만 하고 싶다는 뜻이다. 아이들이 속물에 물들지 않게, 순수함을 간직할 수 있게 지키는 일을 말이다. 세상의 모든 어른은 속물이기 때문에 어른은 한 명도 없고, 순수한 어린 꼬마만 수천 명 있는 곳에서 살고 싶어 한다. &lt;u&gt;&lt;b&gt;호밀밭의 파수꾼. 그게 홀든이 되고 싶은 유일한 것이다.&lt;/b&gt;&lt;/u&gt; 말도 안 되는 일이라는 점을 알지만 그래도 그게 유일한 홀든의 바람이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;그러더니 아이가 한 일, 그거에 젠장 나는 숨이 넘어갈 뻔했다. 아이는 내 코트 호주머니에서 빨간 사냥 모자를 꺼내 내 머리에 씌웠다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caxkux/btsrB6zCI8f/kgUFSF11dy6ZMeMENfzl91/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caxkux/btsrB6zCI8f/kgUFSF11dy6ZMeMENfzl91/img.jpg&quot; data-alt=&quot;빨간 사냥 모자를 쓴 홀든 콜필드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caxkux/btsrB6zCI8f/kgUFSF11dy6ZMeMENfzl91/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcaxkux%2FbtsrB6zCI8f%2FkgUFSF11dy6ZMeMENfzl91%2Fimg.jpg&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;190&quot; height=&quot;190&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;190&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;&lt;span style=&quot;color: #333333; 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: #333333; text-align: start;&quot;&gt;다음은 『호밀밭의 파수꾼』의 마지막 문단이다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;우아, 비가 개처럼 오기 시작했다. 양동이로 쏟아부었다, 하느님한테 맹세한다. 모든 부모나 어머니나 모두가 살까지 흠뻑 젖거나 그러고 싶지 않아 회전목마 지붕 바로 밑으로 가서 서있었지만 나는 한참을 벤치에 그대로 있었다. 나는 완전히 푹 젖었다, 특히 목과 바지가. 사냥 모자는 정말이지 꽤나 나를 보호해 줬다, 어떤 면에서는. 그래도 어차피 흠뻑 젖기는 했지만. 하지만 상관없었다. 갑자기 젠장 아주 행복한 기분이었다. 우리의 피비가 계속 빙글빙글 돌아가는 모습. 나는 빌어먹을 고함을 지를 뻔했다, 나는 그럴 만큼 젠장 행복한 기분이었다, 솔직히 말해서. 이유는 모르겠다. 그냥 아이가 아주 젠장 멋져 보였다, 아이가 파란 코트나 그런 걸 입고 계속 빙글빙글 돌아가는 모습이. 맙소사, 거기서 그걸 봤어야 하는데.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 아름다운 장면이다. 홀든은 속물들로 넘쳐나는 뉴욕을 떠나 아무도 없는 서부 시골로 가려고 했지만, 여동생 피비의 부탁에 못이겨 피비 곁에 남기로 했다. 그리곤 피비가 회전목마를 타는 모습을 바라본다. 억수로 쏟아지는 비를 맞으며 말이다. &lt;u&gt;&lt;b&gt;그 순간이 엄청나게 행복해 홀든은 소리를 지를 뻔했다.&lt;/b&gt;&lt;/u&gt; 누구보다 순수한 피비가 회전목마를 타는 순간을 영원히 눈에 간직하고 싶었으리라.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;호밀밭의 파수꾼에 대한 반응&lt;/h3&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;호밀밭의 파수꾼이 되고 싶었던 샐린저&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJfhGO/btssHCQ2q1a/IeDkqGM3ILdck2xrrwr7F1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJfhGO/btssHCQ2q1a/IeDkqGM3ILdck2xrrwr7F1/img.jpg&quot; data-alt=&quot;J.D. 샐린저&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJfhGO/btssHCQ2q1a/IeDkqGM3ILdck2xrrwr7F1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJfhGO%2FbtssHCQ2q1a%2FIeDkqGM3ILdck2xrrwr7F1%2Fimg.jpg&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;520&quot; height=&quot;347&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;J.D. 샐린저&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샐린저가 맨 처음&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;『호밀밭의 파수꾼』&lt;span&gt; 원고를 뉴욕의 한 출판사에 보냈을 때, &lt;/span&gt;&lt;/span&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그렇지만&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;『호밀밭의 파수꾼』 영화는 없다.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;샐린저가 죽은 뒤 제작된 '호밀밭의 반항아'라는 전기 영화 정도만 있을 뿐이다. 유독 샐린저의 『호밀밭의 파수꾼』이 영화화되지 못한 까닭은 샐린저가 영화사에 판권을 넘겨주지 않았기 때문이다. &quot;홀든이 그걸 원하지 않을 것입니다.&quot;라는 대답과 함께 냉정하게 거절했다. 심지어 본인의 평전 출판도 거부했다. 평전은 위대하다고 평가되는 사람을 대상으로 쓴다. 더 유명해질 기회가 생겼음에도 그러한 평전도 거부한 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;성공한 대부분의 작가와 다르게, 샐린저는 1965년 이래 모든 공적활동을 멈추고 시골집에 조용히 은거했다. 1970년에는 출판사로부터 받았던 선급금 7만 5천 달러를 반납한 후, 더 이상 작품출간을 하지 않겠다고 공언한 다음부터 더 완벽하게 은둔했다. 본인의 문학적 신념을 삶에서 실천한 작가다. 현실에서는 순수한 아이들만 모여있는 곳이 없으니 호밀밭의 파수꾼이 될 수 없다. 호밀밭의 파수꾼이 되지 못할 바에 위선자와 속물들에게서 벗어나 은둔하는 삶을 택한 게 아닐까.&lt;/p&gt;</description>
      <category>책과 사유</category>
      <category>마크 채프먼</category>
      <category>샐린저</category>
      <category>호밀밭의 파수꾼</category>
      <category>호밀밭의 파수꾼 독후감</category>
      <category>호밀밭의 파수꾼 마크 채프먼</category>
      <category>호밀밭의 파수꾼 서평</category>
      <category>호밀밭의 파수꾼 존 레논</category>
      <category>호밀밭의 파수꾼 줄거리</category>
      <category>호밀밭의 파수꾼 평가</category>
      <category>홀든 콜필드</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/313</guid>
      <comments>https://bkshin.tistory.com/entry/%EC%A0%9C%EB%A1%AC-%EB%8D%B0%EC%9D%B4%EB%B9%84%EB%93%9C-%EC%83%90%EB%A6%B0%EC%A0%80-%ED%98%B8%EB%B0%80%EB%B0%AD%EC%9D%98-%ED%8C%8C%EC%88%98%EA%BE%BC%EC%9D%84-%EB%8B%A4%EC%8B%9C-%EC%9D%BD%EC%9C%BC%EB%A9%B0#entry313comment</comments>
      <pubDate>Wed, 30 Aug 2023 23:41:07 +0900</pubDate>
    </item>
    <item>
      <title>[이진경] 철학과 굴뚝청소부 3~4부</title>
      <link>https://bkshin.tistory.com/entry/%EC%9D%B4%EC%A7%84%EA%B2%BD-%EC%B2%A0%ED%95%99%EA%B3%BC-%EA%B5%B4%EB%9A%9D%EC%B2%AD%EC%86%8C%EB%B6%80-34%EB%B6%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bkshin.tistory.com/entry/%EC%9D%B4%EC%A7%84%EA%B2%BD-%EC%B2%A0%ED%95%99%EA%B3%BC-%EA%B5%B4%EB%9A%9D%EC%B2%AD%EC%86%8C%EB%B6%80-12%EB%B6%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;철학과 굴뚝청소부 1~2부&lt;/a&gt;에 이어 3~4부를 정리해본다. 1~2부에서는 대륙의 이성주의와 영국의 경험주의를 다루었다. 데카르트, 스피노자, 로크, 버클리, 흄이 여기에 속한다(이 책에선 라이프니츠가 빠져서 아쉽긴 하다). 인식하는 주체와 인식되는 대상이 서로 다르면 양자가 동일한지 어떻게 확인할 수 있는가 하는 '근대철학의 문제설정'을 바탕으로 1~2부를 설명했다. 3~4부에서도 계속 근대철학의 문제설정을 기준으로 설명한다. 3~4부에서는 독일 고전철학자 칸트, 피히테, 헤겔과 근대철학의 해체자 맑스, 프로이트, 니체를 다룬다. 이 포스팅에선 니체 정리는 뺐다. 니체는 하도 많이 다뤄서 여기서까지 중복해서 다루진 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;『철학과 굴뚝청소부』는 근대철학과 현대철학 일부(언어학, 구조주의, 포스트 구조주의)를 다룬다. 푸코나 들뢰즈와 가타리를 설명하는 현대철학 파트도 재밌지만, 내겐 근대철학만큼 흥미있진 않다. 구조주의나 포스트 구조주의도 각잡고 재미를 붙이면 흥미있을 내용이긴 하다. 그런데 '각'잡기가 좀 귀찮다. ^.ㅠ 그래서 포스팅으로 정리할 땐 근대철학까지만 썼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근대철학의 해체자들도 근대철학자로 포함한다면, 근대철학자는 데카르트부터 니체까지다. 데카르트는 1600년대에 활동한 사람이고, 니체는 1900년에 죽었다. 따라서 근대철학은 1600년부터 1900년까지라고 볼 수 있다. 근대철학 300년간의 천재들의 사유를 따라가는 게 꽤나 재밌다. 더군다나 다른 책과 다르게 『철학과 굴뚝청소부』는 '근대철학의 문제설정'을 중심으로 각 철학을 설명한다. 바로 이 점이 『철학과 굴뚝청소부』의 특징이자 흥미를 끄는 점이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제3부 독일의 고전철학 : 근대 철학의 재건과 '발전'&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 칸트 : 근대 철학의 재건&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;근대철학의 위기와 칸트철학&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;칸트는 &quot;인간이란 무엇인가?&quot;라고 질문한다. 이전에는 주체라고 표현했는데, 칸트는 인간이라고 말한다. &lt;b&gt;인간에 대해, '인간은 무엇을 알 수 있는가?', '인간은 무엇을 할 수 있는가?', '인간은 무엇을 바랄 수 있는가?'라는 세 가지 질문을 던진다.&lt;/b&gt; 첫 번째 질문을 다룬 책이 &amp;lt;순수이성비판&amp;gt;, 두 번째 질문을 다룬 책이 도덕에 관한 &amp;lt;실천이성비판&amp;gt;, 세 번째 질문을 다룬 책이 인간의 목적개념을 다룬 &amp;lt;판단력비판&amp;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;b&gt;근대적 주체로서의 인간과 진리를 확고하게 재건해 근대적 사고의 기반을 다시 다지고, 근대철학을 위기에서 구하리라고 생각했다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론적으로 말해 칸트는 주체(인간)는 진리를 인식할 수 있다고 말한다.&lt;/b&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫째는 '진리' 개념의 전환과 재건이다.&lt;/b&gt; 흄은 귀납론과 인과법칙을 부정했다. 이렇게 되면 경험으로 참된 지식을 얻지 못한다. 곧, 진리는 경험을 통해 얻어지지 않는다. 이게 칸트가 받아들인 흄의 비관적인 결론이다.&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;칸트는 사물자체를 연구하지 말고 현상을 연구해야 한다고 말한다. 다시 말해, 진리는 대상에서 찾을 게 아니라 대상을 만드는 우리의 판단형식에서 찾아야 한다는 뜻이다. &lt;b&gt;이처럼 대상이 인식을 만드는 게 아니라 인식이 대상을 만든다는 생각, 진리는 대상에서가 아니라 주관(주체)의 판단형식에서 찾아야 한다는 생각은 이전의 생각을 크게 뒤바꾸어 놓았다. 이를 두고 '코페르니쿠스적 전환'이라고 한다.&lt;/b&gt; 예전에는 지구를 우주의 중심에 두고 태양을 비롯한 모든 별이 그 주위를 돈다고 생각하다가, 코페르니쿠스에 이르러 우주의 중심은 다른 데(태양) 있다고 생각하는 발상의 전환이 있었다. 칸트는 이러한 발상의 전환을 여기에 비유했다.&amp;nbsp;&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;우리에게 새로운 지식을 더해주면서도 언제나 확실하고 타당한 판단은 없을까? 이게 바로 칸트의 고민이다. 선험적 명제처럼 언제나 확실하되, 종합판단처럼 새로운 지식을 추가로 주는 판단이 있는지 말이다. 이걸 칸트는 '선험적 종합판단은 가능한가?'라고 묻는다. 칸트는 선험적 종합판단이 가능하다고 말한다. 예를 들어, '모든 삼각형의 내각 합은 180도다'라는 판단이 그렇다. 유클리드 기하학에 따르면 이 명제는 언제나 타당하다. 게다가 삼각형이라는 단어를 분석해봐도 내각의 합이 180도라는 결론이 나오진 않는다. 이 같은 선험적 종합판단이야말로 인간을 진리에 도달케 해주는 판단형식이다. 이로써 칸트는 흄이 철저히 해체한 진리의 개념을 새로이 재건한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘째, 근대적 '주체'의 재건이다.&lt;/b&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;지성이란 분별하는 능력(분별력)이다. 크다, 작다, 하나다, 다수다, 필연이다, 우연이다 등의 '범주'를 통해 대상의 성질을 구별하고 그것들을 결합해 어떤 판단을 만들어내는 능력이다. 그래서 경험에서 어떤 판단을 이끌어내려면 최소한 '범주'가 있어야 한다는 게 칸트의 생각이다. 따라서 '범주'는 경험보다 먼저 있어야 한다. 경험에 좌우되는 게 아니다. 칸트는 인간이 판단하는 데 필요한 최소한의 범주를 12개로 나누었다.&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;라고 말한다. 곧, 지성과 이성이 모두 있어야 인식하고 판단할 수 있다는 말이다.&amp;nbsp;감성을 통한 인식은 지성 때문에 '이성'에 다다른다. 이때 이성은 인간의 이성이나 이성주의라는 말과는 달리, '하나의 원리로 통일하는 능력'을 말한다. 칸트만의 고유한 개념이다. 이성은 경험을 넘어, 하나의 원리로 다양한 경험을 통일하려는 성질이 있다.&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;b&gt;셋째, 근대적 윤리학(도덕철학)의 확립이다.&lt;/b&gt; 칸트가 윤리학 혹은 도덕철학의 문제를 다룬 책이 '실천이성비판'이다. &amp;lt;실천이성비판&amp;gt;에서 제기하는 문제는 이렇다. '인간의 의지와 행동은 이성의 힘만으로 규제될 수 있는가?' 다시 말해, 인간의 행동을 규제하는 원리가 인간의 이성 안에 있는가, 모든 인간이 따라야 할 보편 원리가 있는가 하는 것이다.&amp;nbsp;앞서 봤듯 이는 근대 윤리학에서 가장 중요한 질문이다. 인간의 이성이 신에게서 독립했기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 질문에 답하려고 칸트는 모든 인간에게 해당되는 '보편타당한 윤리원칙'을 찾으려고 했다. 칸트는 유명한 말을 한다. &quot;너는 언제나 네 의지의 준칙이 보편적인 입법원리로써 타당하게 행동하라&quot;라고 말이다. 곧, 사람이 어떤 행동을 할 때 그 의지가 법으로 만들어져도 좋을 만큼 보편타당한 거라면 그것대로 행동하라는 말이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;칸트는 '자유'를 새롭게 정의한다. 자유란 다음 원칙을 따르는 것이다. &quot;나는 할 수 있다. 왜냐하면 해야 하기 때문에.&quot; 즉, 도덕이란, 본질적으로 내가 어떻게 &quot;해야 한다&quot;는 규정이다. 거기에 따라 사는 삶이 선이다.&amp;nbsp; 이런 점에서 칸트의 윤리학은 극도로 계몽주의적인 성격을 갖는다. 개개인의 욕망이나 의지를 '보편적인 입법원리'가 될 수 있는 한에서만 받아들이기 때문이다. 그런 원리에 따르도록 훈련받지 못한 대중은 일깨워 계몽해야 한다는 말이다. 혈연, 무력, 종교가 지배하던 중세와 달리 법으로 지배하려는 부르주아지의 관점을 보여주는 관점이라고도 하겠다.&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;칸트는 흄이 만들어 놓은 '근대철학의 위기' 속에서 작업했다. 위기 속에서 붕괴된 근대철학의 지반을 새로이 복구하려 했다. '진리'와 '주체'를 새로운 형태로 재구성했다.&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;둘째, 선험적 주체에 관한 문제다. 근본적인 난점은 '선험적 형식' 자체에 있다. 지성의 선험적 형식인 '범주'를 보자. 칸트는 범주를 12개로 나눴지만, 아리스토텔레스는 10개로 나누었다. 범주는 철학자마다 다르게 설정할 수 있다. 그렇다면 이 범주가 모든 판단의 전제가 되는 '선험적 형식'이 될 수 있는가 하는 의문이 제기될 수밖에 없다. 왜냐하면 범주 이전에 범주를 나누는 어떤 기준이 있어야 하는데, 그게 사람마다 다르다는 건 말이 안 되기 때문이다.&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;2. 피히테 : 근대 철학과 자아&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;'자아'의 복권&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피히테는 칸트를 비판한다. 12개 범주만 갖는 칸트의 선험적 주체가 확실한 만큼이나 공허하다고 생각하며, 주체(피히테 용어로는 '자아')의 활동과 무관하게 정의되어 있다고 말한다. 오히려 판단의 범주나 원리는 자아(주체)의 활동과정의 산물이라고 본다.&lt;/p&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;h4 data-ke-size=&quot;size20&quot;&gt;피히테의 철학적 태제&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;&lt;b&gt;첫째 테제 - &quot;경험 등 모든 사실의 설명에 근거가 되는 자아는 다른 무엇보다도 먼저 자아 자신 안에 정립되어야 한다.&quot;&lt;/b&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;b&gt;둘째 테제 - &quot;자아는 비아를 반정립한다. 나아가 자아는 비아를 자기 안에서 반정립한다.&quot;&lt;/b&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;b&gt;셋째 테제 - &quot;자아는 자아 안에서 가분적 자아에 대해 가분적 비아를 반정립한다.&quot;&lt;/b&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;h4 data-ke-size=&quot;size20&quot;&gt;자아철학의 봉쇄장치&lt;/h4&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;h3 data-ke-size=&quot;size23&quot;&gt;3. 헤겔 : 정점에 선 근대 철학&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비판철학과 헤겔&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤겔은 변증법을 체계화한 철학자로 유명하다. 20세기 중반까지 헤겔은 가장 영향력 있는 철학자였다. 헤겔 철학은 매우 복잡하고 어렵다.&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;h4 data-ke-size=&quot;size20&quot;&gt;'절대정신'의 변증법&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;사회나 역사로 바뀐 절대정신은 역사 발전과정을 통해, 그리고 자기 발전과정을 통해 자기 자신을 향한 인식에 다다른다. 자기에게로 복귀하는 것이다. 이런 의미에서 역사는 '절대정신의 실현'이라는 목적을 향해 발전해 가는 '목적론적 과정'이라고 한다. 정신에서 대상으로, 그리고 다시 정신으로 돌아가는 순환 운동이다. 그러나 끝날 때는 좀 더 높은 단계로 발전하는 순환 운동을 흔히 '부정의 부정'이라는 말로 요약한다. 이것은 정신과 대상의 변증법, 절대자의 변증법을 집약하고 있으며, 헤겔 체계를 특징짓는 법칙이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;헤겔에게 진리란 절대정신이 스스로를 돌아보면서 진리의 기준을 계속 정정해 가는 과정이다. 진리를 확인하고 보증해 주는 것은 발전해 가는 절대정신 자신이다.&lt;/b&gt;&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;/p&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;b&gt;대상과 일치하는 지식이란 결코 확인할 수 없기에 그런 진리란 궁극적으로는 불가능하다고 인정하거나(첫 번째 선택지), 아니면 &quot;내가 곧 진리니라&quot;는 확인할 수 없는 선언을 반복하는 것(두 번째 선택지) 둘 중 하나 밖에 없다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 근대철학은 종말의 길로 접어든다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제4부 근대철학의 해체 : 맑스, 프로이트&lt;/h2&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;h4 data-ke-size=&quot;size20&quot;&gt;맑스의 '유물론 비판'&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맑스는 실천이라는 개념을 철학에 끌어들였다. 또한 근대철학을 해체하는 데 맑스가 사용한 개념이 실천이다. 다시 말해 실천이란 개념을 활용해 맑스는 근대철학의 문제설정을 넘어선다. 그런데 칸트도 &amp;lt;실천이성비판&amp;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;이라고 말했다. 바꿔 말해 인간은 단지 물질 덩어리란 말이다. 이를 기계론적 유물론이라고 한다. 맑스는 다르게 생각했다. 맑스는 대상을 활동적인 생활 과정, 실천 과정에서 파악하려고 했다. 예를 들어 어느 도시에 성(castle)이 있다고 하자. 이 성은 중세 시대 때는 권력의 중심지이지만, 현재는 관광지일 뿐이다. 시대에 따라 성의 의미가 바뀐 것이다. 이로써 대상은 사회적인 맥락이나 역사 속에서 정의될 수 있게 된다. 맑스의 표현을 빌리면, &quot;성은 성이다. 특정한 관계 속에서는 관광지다.&quot;라고 말할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째, 맑스는 포이어바흐를 비롯한 유물론자들이 '대상을 단순히 지각, 직관, 감각으로만 파악했다.'고 비판한다. 포이어바흐의 이런 유물론 관점은 헤겔의 관념론을 비판하면서 제시된 것이다. 관념론자는 대상을 주체의 관념 속에서 정의한다. 이에 관해 포이어바흐는 &quot;관념론자들은 사물을 더 잘 보기 위해 인간에게서 눈을 빼버렸다&quot;고 비판한다. 뒤짚어 말하면, '더 잘 보기 위해서 차라리 눈을 갖고 관념을 없애는 편이 낫다'라는 뜻이다. 그래서 포이어바흐는 대상을 눈에 비치는 대로 파악하려 했다. 맑스에게 지각은 대상을 수동적으로 비추는 거울이 아니다. 목적을 갖는 활동이자 실천이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셋째는 진리의 문제다. 인간이 대상에 대한 진리를 가질 수 있는가하는 문제는 이론의 문제가 아니라 실천의 문제라는 뜻이다. 따라서 대상에 대해 '영원한' 진리를 얻는 건 불가능하다. 부시맨들에게 콜라병이 주어진다고 해보자. 부시맨 A에겐 콜라병이 호두를 까는 물건이고, 부시맨 B에겐 피리가 될 수 있다. 호두까는 물건으로써 현실성과 힘을 부여받는다면 콜라병은 호두까는 물건으로 입증될 것이다. 피리로써의 기능을 잃는다면 콜라병은 이제 호두까는 물건이 되는 것이다. 콜라병은 영원히 호두까는 물건이거나 영원히 피리가 되지 않는다. 실천, 현실성, 힘에 따라 달라진다.&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;h4 data-ke-size=&quot;size20&quot;&gt;역사유물론과 주체철학&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맑스는 실천을 도입해 '진리'라는 근대철학의 목표는 물론, 대상 자체도 파괴했다. 단지 파괴하는 데 머물지 않았다. 물질 개념조차 역사적으로 파악하는 역사유물론을 만들었다. 역사유물론을 제시하면서 근대철학의 출발점이던 주체(인간) 개념이 근본적으로 달라졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;맑스는 '인간'이라는 개념 자체를 해체한다. 데카르트처럼 이성과 정념을 가진 존재로 정의할 수 없다. 그것은 인간이 가진 수많은 특징 가운데 하나이기 때문이다. 이런 식이면 사람마다 다 인간을 다르게 정의할 수 있다. 맑스가 보기에 중요한 점은 개인이 어떤 사회적 특징을 갖고 있으며, 그것이 어떻게 변하는가를 이해하는 것이다. 인간은 사회적 관계의 총체라는 말이다.&lt;/b&gt; &lt;b&gt;곧, &quot;흑인은 흑인이다. 특정한 관계 속에서만 그는 노예가 된다.&quot;라고 말할 수 있다.&lt;/b&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;h4 data-ke-size=&quot;size20&quot;&gt;맑스철학의 근대성과 탈근대성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하면 맑스는 '실천'이라는 개념으로 철학의 틀을 바꿨다. 맑스에 따르면 주체도, 대상도, 인식도, 진리도 모두 실천이란 개념에 따라 새롭게 정의된다. &lt;b&gt;근대철학이 추구하던 '확고한 진리'라는 틀을 깨버렸다. 게다가 근대철학의 출발점이던 자명한 주체도 해체해 버린다. 이제 주체는 사회적 관계 속에서 정의된다.&lt;/b&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;2. 프로이트:정신분석학과 근대 철학&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;철학자 프로이트?&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;인간의 정신은 의식과 무의식으로 나뉜다. 둘은 서로 나뉘어져 있다. 의식은 무의식이 어떠한 상태인지, 무엇을 하려고 하는지 모른다는 말이다. 프로이트에 따르면 도덕적으로 용납되지 않는 욕망(특히 성욕)이 무의식과 관련이 되어있다고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로이트는 다시 무의식을 두 가지 개념으로 나눈다. 억압되는 욕망과 충동을 '이드'라고 하며, 억압하는 기제를 '초자아'라고 한다. 이드는 쾌락원칙에 따라 움직이며, 초자아는 그것을 통제하려는 사회적 질서가 내면화된 것이다. 이 둘은 언제나 충돌한다. 이드는 쾌락을 찾아 움직이려하고, 초자아는 그러면 안 된다고 막는다. 이 충돌을 화해시키는 존재가 자아(ego)다. 자아는 금지된 것을 피하면서 쾌락을 추구하도록 조정한다. '현실원칙'에 따라 움직이는 것이다. 이드와 초자아는 무의식인 반면, 자아는 의식과 무의식 사이에 걸쳐 있다.&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;/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;</description>
      <category>책과 사유</category>
      <category>근대철학의 문제설정</category>
      <category>근대철학의 해체</category>
      <category>독일 고전철학</category>
      <category>철굴</category>
      <category>철굴 3~4부</category>
      <category>철굴 정리</category>
      <category>철학과 굴뚝 청소부</category>
      <category>칸트와 피히테</category>
      <category>프로이트와 맑스</category>
      <category>피히테와 헤겔</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/309</guid>
      <comments>https://bkshin.tistory.com/entry/%EC%9D%B4%EC%A7%84%EA%B2%BD-%EC%B2%A0%ED%95%99%EA%B3%BC-%EA%B5%B4%EB%9A%9D%EC%B2%AD%EC%86%8C%EB%B6%80-34%EB%B6%80#entry309comment</comments>
      <pubDate>Tue, 25 Jul 2023 00:51:36 +0900</pubDate>
    </item>
    <item>
      <title>[이진경] 철학과 굴뚝청소부 1~2부</title>
      <link>https://bkshin.tistory.com/entry/%EC%9D%B4%EC%A7%84%EA%B2%BD-%EC%B2%A0%ED%95%99%EA%B3%BC-%EA%B5%B4%EB%9A%9D%EC%B2%AD%EC%86%8C%EB%B6%80-12%EB%B6%80</link>
      <description>&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;하여간 철학자들은 무슨 까닭으로 철학을 했을까? 너무 다양한 철학자가 있는 현대는 논외로 하고, 근대까지만 생각해 보자. 내가 존재하는 이유도 궁금했을 테고(존재론), 내가 인식하는 게 사실인지 여부도 진심으로 궁금했을 것이다(인식론). 내가 어떻게 살아야 하는지도 알고 싶었을 게다(도덕론). 가령, 내가 사과를 보고 '빨갛다'고 생각한다고 하자. 사과가 '실제로' 빨간 걸까? 아니면 사과는 노란색인데 '내'가 그저 빨갛다고 인식하는 걸까? 내 뇌나 눈이 단지 사과를 빨갛다고 인식하는 것일 수도 있지 않은가? 사과는 실제로 노란색인데 말이다. 그러면 내가 인식한 게 진리 내지는 사실이라고 확답할 수 있을까? 확답하지 못한다. 인식하는 주체와 인식되는 대상이 서로 다른 한, '주체가 인식한 대상'과 '실제 대상'이 일치하는지 여부를 알 순 없다.&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;철학의 의미나 중요성, 역사를 차치하고 나에겐 철학이 그냥 재밌다. 철학책을 즐겨 읽은 지도 어느덧 10년이 됐다. 서점을 가도 자연스럽게 철학 코너를 서성인다. 문학, 과학 서적을 읽다가도 다시 철학책을 집어 들곤 한다. 왜 그럴까. 우선, 나는 존재나 인식과 관련한 진리 따위가 궁금하지 않다. 진리가 무언지 알게 뭔가. 내가 먹고사는 데 전혀 상관없는데 말이다. 철학의 중요성이나 의미도 내겐 별로 중요하지 않다. 철학이 중요하든 말든 관심 없으니까. 그런데도 철학 서적들은 나를 매료시킨다. 우선 지적 향연이 주는 즐거움이 가장 큰 것 같다. 참 다양한 사람들이 주장한 독창적인 생각들을 알아가는 재미가 있다. 역사적 천재들의 생각을 이해해 가는 맛이 있다. 더불어 새로운 관점으로 세상을 보게 된다는 즐거움도 크다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;『철학과 굴뚝청소부』는 한국 학자가 쓴 가장 유명한 근대철학 개론서다. 1994년에 초판이 나와 30년가량, 철학깨나 좋아하는 사람들에게 인기 있는 책이다. (마지막 부분인 구조주의 파트를 제외하고) 지금까지 이 책을 세 번 봤다. 오디오북으로 2번, 종이책으로 1번. 오디오북을 녹음한 김효영 성우 덕분에 오디오북을 듣는 동안 내용이 머리에 잘 들어왔다. 성우가 그냥 글만 읽는 게 아니라 내용을 이해하고 읽는다는 느낌이라서 그렇다. 저자가 강의하는 듯한 느낌이랄까.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;s&gt;하여간 김효영 성우 최고!&lt;/s&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;굴뚝청소부 두 사람이 청소를 마치고 내려왔다. 한 사람의 얼굴은 더러웠고, 다른 사람의 얼굴은 깨끗했다. 이 가운데 누가 세수를 할까?&lt;br /&gt;&lt;br /&gt;얼굴이 깨끗한 사람이다. 상대방 얼굴을 보고서, 자기도 더러우리라 생각하기 때문이다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;앞서 말했듯, 인식하는 주체와 인식되는 대상이 서로 다르면 인식된 게 사실과 일치하는지 여부를 확인할 길이 없다. 그렇다면 진리란 불가능한 것일까? 진리에 도달하려던 근대철학자는 이런 결과를 받아들일 수 없었다. 그들은 이 난국을 빠져나가기 위해 여러 가지 탈출구를 찾아낸다. 근대철학의 다양한 사상은 이런 식으로 나타났다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;『철학과 굴뚝청소부』를 참고해서, 근대철학의 경계들을 자세히 정리해 본다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;서론&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; 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;철학은 의심에서 출발한다. 칸트는 '철학사는 전장'이라고 말했다. 즉, 다른 사람이 주장한 철학에 반하는 철학을 하면서 철학사가 진행된다는 뜻이다. 치고받는 투쟁으로 철학자들이 얻는 점은 무엇일까? 그때까지 지배적이던 철학 안에서 사고하지 못했던  점을 찾아내는 것이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;그간 지배적인 사상 때문에 보지 못한 걸 새로 찾아내는 작업이 철학인 셈이다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;철학사에서 독자적인 사상가로 남으려면 남들이 주장한 철학과 다른 무언가가 있어야 한다. 곧, 철학자는 기존 사상과 다른 생각을 해야만 철학사에서 자기 자리를 차지할 수 있다. 그러면서 다른 사람에게서 보편성을 인정받아야 한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다시 말해 기존과는 다른 사상이면서 보편성을 인정 받야만 철학사에서 자리매김을 할 수 있다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;결국 철학은 앞서 있던 사상을 넘어서는 일이다. 세 가지 넘어섬이 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫째, 당시의 지배적인 사상을 넘어서는 것이다. 여기서 '넘어섬'이 발전이나 진화를 뜻하는 건 아니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;기존 사상에 가져려 안 보이던 걸 밝혀내는 게 반드시 발전일 필요는 없으니까. 가령 헤겔이 칸트 철학을 넘어섰다고 해서, 헤겔 사상이 칸트 사상보다 반드시 발전했다고 말할 수는 없다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;이런 점 때문에 철학에서는 과학에서와 달리 아직도 플라톤이나 아리스토텔레스 같은 고대 철학자가 살아있을 수 있다.&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;b&gt;둘째, 하나의 흐름(패러다임)을 넘어서는 것이다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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;셋째, 하나의 시대를 지배하는 특정한 사고 방식을 넘어서는 것이다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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;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: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면 경계선을 찾아내고, 경계선의 의미를 읽어내려면 어떻게 해야 할까? 이 문제는 아주 어렵다. 철학자가 스스로 경계선을 긋지 않으며, 철학책 어디에서도 그 경계선을 보여주지 않기 때문이다. 경계선 같은 건 애시당초 없는 것일지도 모른다. 원뿔을 아래에서 보면 원이지만, 옆에서 보면 삼각형이다. 마찬가지로 데카르트를 로크와 비교할 때, 아우구스티누스와 비교할 때, 또는 칸트와 비교할 때 그어지는 경계선이 모두 다르다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제1부 철학의 근대, 근대의 철학&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 데카르트, 근대 철학의 출발점&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;중세 너머의 철학&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;근대란 무엇인가? 역사적 근대 전체를 말하기엔 범위가 넓으니까, 철학의 근대로 정의의 범위를 좁혀보자. 철학에서 근대란 무엇인가? 근대란 중세와 경계선이 지어진 지점이다. 그러므로 중세를 먼저 이야기해야 한다. 중세는 신과 성직자가 지배하던 시대였다. 그렇기 때문에 중세에서 철학은 신학의 시녀였다. 중세의 시대적 흐름에 반하는 인물이 있었는데, 지오다노 브루노다. 그는 일찍이 코페르니쿠스의 지동설을 받아들였고, 범신론을 받아들였다. 달리 말해 브루노는 신학의 시녀이길 거부했다. 결국 브루노는 화형을 당했다. 중세 때는 신학 안에서만 철학이 허용되던 시기다. 하지만 인간의 사고를 근본에서부터 억압하고 제한하는 게 불가능했는지도 모른다. 죽음 앞에서도 굴복하지 않는 인간이 있기 마련이다. 시간이 흐르고 지식이 쌓이면서 성서를 이탈하는 사람들이 많아졌다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;u&gt;인간의 삶에서 문제가 되는 모든 주제들은 불로 막든 협박으로 막든 어쩔 수 없이 다루어질 수밖에 없다.&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이는 중세에서도 예외가 아니다. 교회 안에서도 마찬가지다. 이런 점에서 중세가 단순히 정체된 암흑의 시대라는 것은 단면적인 의견이다.&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;이런 상황에서 데카르트는 행운아였다. 자신에게 주어진 이 결정적인 중세의 틈새가 벌어진 시기에, 자신이 차지한 위치에서, 자신이 지닌 탁월한 사고의 힘을 보여줬기 때문에 '근대 철학의 아버지'라는 타이틀을 얻었다. 근대 철학의 아버지가 데카르트라는 점에서는 이견이 없으므로, 근대 철학의 출발점은 데카르트에서부터 시작해야 한다. 데카르트에 관해 말하려면 근대 철학의 제1원리인 '코기토(Cogito)'에 대해 말해야 한다. 코기토 에르고숨은 '나는 생각한다. 고로 나는 존재한다'라는 뜻이다. 데카르트가 볼 때 이 명제는 확실한 사실이다. 이 명제는 '나'라고 하는 주체가 존재하는 이유는 바로 내가 생각하기 때문이라고 말한다. 나를 신의 피조물로 본 중세의 관점과 결정적으로 갈라서는 명제다. 그래서 코기토 명제가 근대 철학을 알리는 출발점이 됐다.&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;아우구스티누스에게 중요한 건 신과 영혼이었다. '이해하려면 믿어라'라고 말한다. 스콜라 철학에서는 '믿기 위해서는 이해하라'로 바뀐다.&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;b&gt;근대 철학을 주체 철학이라고 말한다.&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;b&gt;주체는 신에게서 벗어나 스스로 지식을 얻을 능력을 얻었다. 그런데 신에게서 벗어나자마자 인식론 때문에 진리에 다다를 능력이 없어질 상황에 내던져졌다. 기어코 독립할 능력도 없으면서 신에게서 도망친 꼴이 되는 셈이다. 따라서 데카르트나 이후 근대 철학에게는 주체가 진리에 이를 수 있음을 증명하는 게 가장 중요한 문제였다. 주체를 독립시키자마자 진리라는 문제가 따라다니게 됐다. 요약하면 &lt;u&gt;주체는 근대 철학의 출발점이고, 진리는 그 목푯점이다. 이 두 개의 범주는 근대 철학 전체의 기초와 방향을 특징짓는 가장 근본적인 범주다.&lt;/u&gt; 근대 철학의 경계는 이런식으로 그어지기 시작했다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;진리에 이르는 길&lt;/h4&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;완벽한 신이 준 본유 관념은 완전한 것이다. 이러한 이유로 데카르트는 인간이 완전한 것을 인식할 능력이 있다고 생각했다. 이성의 완전성을 주장하려고 신을 끌어들였다.&lt;/b&gt; 데카르트가 갖고 있던 신학 요소는 시대적 한계라고 볼 수 있다. 분명한 사실은 시대적 한계에도 불구하고 중세 세계관과 근대 세계관의 공존 속에서 우위를 점하는 게 근대 세계관이라는 점이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자연을 지배하려면 자연을 알아야 하듯, 우리 자신의 육체를 지배하고 통제하기 위해서는 육체를 알아야 한다. 더불어 감정과 정념을 규제하고 조절하려면 감정과 정념도 알아야 한다. 그래서 데카르트는 &amp;lt;정념론&amp;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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;근대 철학의 딜레마&lt;/h4&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;u&gt;&lt;b&gt;주체가 인식하는 대상과 실제 대상이 일치한다는 점을 제3자 혹은 신이 증명해주지 않는다면 진리에 도달할 수가 없다. 주체가 신에게서 벗어남에 따라 생겨난 근대 철학의 딜레마이다. 이 딜레마는 근대에서 생긴 딜레마다. 중세에는 없었다. 중세에서는 모든 진리를 신이 설명해줬기 때문이다.&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&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;b&gt;존재, 인식, 도덕 모두 중세에는 신이 증명해주었다. 하지만 신에게서 벗어난 후에는 새롭게 생각해야 했다.&lt;/b&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;이로써 데카르트 이후로 존재론, 인식론, 도덕론이라는 철학의 세 가지 분과가 생겼다. 여기서 가장 중요한 것은 인식론의 문제였다.&lt;/b&gt; 왜냐하면 신으로부터 독립해도 좋은지 그런 능력이 인간에게 있는지를 확인해야 했기 때문이다. 주체가 신에게서 독립하려면, 그럴 수 있는 최소한의 능력, 곧 진리를 인식할 수 있는 능력이 있어야만 했다. 만약 그런 능력이 없다면 신에게서 독립하는 게 무모한 짓이 된다. 따라서 근대 철학에서는 인식론이 가장 발전했다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주체와 대상의 일치를 판단하는 존재는 주체나 대상이 아니라 제3자인 절대적 재판관이 되어야 한다. 이를 위해 데카르트는 결국 다시 신을 끌어들였다. 나중에 보게 될 버클리나 헤겔도 다시 신을 끌어들였다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;근대 철학의 딜레마가 한 가지 더 있다. 유아론이라는 딜레마다. 예를 들어 100명의 사람이 모두 '나는 생각한다. 고로 나는 존재한다.'라고 생각한다고 해보자. 게다가 100명이 서로 다른 주장을 한다고 하자. 그럴 때 누구의 주장이 맞는지 알지 못한다는 문제가 생긴다. 누구 주장이 맞는지 누가 보증하냐는 것이다.&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 스피노자, 근대 너머의 근대 철학자&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;데카르트와 스피노자&lt;/h4&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;스피노자에게 자연은 수동적이면서도 동시에 능동적이고 활기있는 존재였다.&lt;/b&gt; 두 번째 비판은 주체와 분리된 대상을 어떻게 인식할 것인가, 어떻게 하면 진리에 도달할 수 있는가 하는 문제와 관련있다. 여기서 두 개의 실체(주체와 객체)가 있다고 주장하는 데카르트를 비판하고, &lt;b&gt;스피노자는 오직 하나의 실체만 존재한다고 주장한다.&lt;/b&gt; 또한 개념이나 지식은 실제와는 완전히 다르므로 양자가 일치하는 건 불가능하다는 입장을 취한다. 한 마디로 개라는 개념은 짓지 않는다는 것이다. 양자가 일치하는 건 불가능하지만 양자는 단일한 실체의 속성이어서 애초부터 일치할 수밖에 없다는 게 그의 주장이다. 또한 어떤 판단이 진리인지 아닌지 알려면 진리를 미리 갖고 있어야 한다는 역설까지 지적한다. 진리가 진리와 허위의 기준이라는 말이다. 세 번째는 윤리학과 관련있다. 데카르트에 따르면 인간은 이성을 통해 육체를 억제해야 한다고 말한다. 데카르트의 윤리학이다. 이런 점에서는 데카르트의 윤리학은 계몽주의의 기반을 마련했다고 볼 수 있다. 스피노자는 이에 반대했다. &lt;b&gt;감정이나 욕망, 정념을 이성으로 억제하는 건 현실적이지 않을 뿐만 아니라 옳지도 않다고 말했다. 오히려 스피노자는 인간이 자연과 다른 존재가 아니라 자연의 일부임을 분명히 했다. 스피노자의 자연주의는 존재론에서부터 일관된다.&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;스피노자의 자연주의&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 style=&quot;color: #333333; 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;진리와 공리&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스피노자에게는 데카르트가 부딪혔던 정신과 육체가 일치하는가의 문제가 전혀 발생하지 않는다. 그렇다면 유아론의 딜레마는 어떤가? 스피노자는 &amp;lt;에티카&amp;gt; 2부에서 '진리가 진리의 기준이다'라고 말한다. 즉, 빛이 빛과 어둠의 기준이 되듯이 말이다. 진리 자체가 진리의 기준이 된다는 말이다. 이로써 어떤 진리가 진리인가라는 문제를 해결하려고 했다.&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;무의식의 윤리학&lt;/h4&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;스피노자의 탈근대적 이탈&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스피노자는 데카르트 철학에서 사상을 출발했지만, 데카르트에서 크게 벗어났다. 데카르트의 반자연주의에 스피노자는 명확하게 반대 깃발을 내세웠다. 아울러, 주체를 사고와 판단의 중심으로 여겼던 주체 철학에서도 벗어났다. 이로써 주체와 객체의 일치의 문제가 스피노자에게는 없었다. 나아가 인식이 진리를 제공하리라는 근대 철학적 신념과 달리 차라리 진리가 인식에 앞서 존재해야 한다는 역설을 지적함으로써 근대적 인식론에서 완전히 이탈했다. 근대적 사고와는 전혀 다른 길이다. 이런 면에서 &lt;b&gt;스피노자는 근대 철학이 나은 근대 철학 최초의 근대 철학 이탈자요 반항자인 셈이다. 스피노자는 근대 최초의 탈근대인이었다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제2부 유명론과 경험주의 : 근대 철학의 동요와 위기&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 유명론과 경험주의&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;실재론과 유명론&lt;/h4&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;유명론은 명목론이라고도 한다. 유명론을 한 마디로 말하면 '오직 이름일 뿐'이라는 뜻이다. 무엇이 이름 뿐인가? 바로 보편적인 건 오직 이름 뿐이라는 주장이다. 예를 들어 강의장 안에 사람 10명이 있다고 하자. 그 가운데 철수도 사람이고 영희도 사람이다. 이럴 때 '인간'이라는 개념은 무엇인가? 강의장 안에 인간이 있는가? 강의장 안에는 철수라는 개인과 영희라는 개인만 있을 뿐, 인간이라는 존재는 없다고 볼 수도 있다. 인간은 철수라는 개인, 영희라는 개인, 길동이라는 개인을 모두 싸잡아 명명한 '이름'일 뿐이라는 것이다. 이렇듯 보편적인 건 오직 이름일 뿐이라는 주장을 하는 사람을 유명론자라고 한다. 반대로 영희라는 개인, 길동이라는 개인이 모두 하나하나의 인간이라고 볼 수도 있다. 이런 주장을 하는 사람, 즉 보편이 실재한다고 주장하는 사람을 실재론자라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;보편 논쟁&lt;/h4&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;아퀴나스와 오컴&lt;/h4&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;신이 인간의 이성을 만들었으므로, 이성적 진리와 종교적 진리는 신으로 귀착되기 때문에 같다고 볼 수 있다. 그렇다면 이성으로 인식할 수 있는 '신의 진리'가 중요해진다. '신의 진리'를 이성이 인식하게 돕는 게 당시 철학자의 과업이 된다. 그리하여 &quot;믿기 위해서는 이해하라!&quot;라는 슬로건이 나왔다. 스콜라 철학에서 중요한 슬로건이다. 이로써 철학은 '신학의 시녀'라는 임무를 공식적으로 부여받게 되었다. 이런 식으로 아퀴나스는 이성적 진리와 신적인 진리를 통일하려고 했다. 이것이 바로 스콜라철학의 기초를 이뤘다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;반대로 윌리엄 오컴은 당시 유명론자로 가장 유명했다. 그는 이렇게 말한다. &quot;보편 개념은 기호다. 기호에 상응하는 실재는 없다. 사물에 앞서가는 보편자는 신의 정신 속에도 없다.&quot; 가령, 추상적인 '언제', '어디'와 같은 개념은 실재하지 않으며, 오직 구체적인 장소나 시간만이 실재한다고 한다. 1, 2, 3이라는 숫자는 실재하지만 '수'라는 것은 없다고 한다. 결국 보편 개념은 이름일 뿐이지 실재하지 않는다고 주장한다. 그런데 오컴은 이런 논리가 기독교 교리에 까지 적용되면 신학 자체가 붕괴될 것임을 알고 있었다. 신학이 붕괴되는 걸 피하려고 했는지, 자신에게 가해질 교회의 탄압을 피하려고 했는지, 오컴은 이런 주장을 오직 이성이 작용하는 영역에만 한정했다. 신학에서는 오컴의 논리가 통용되지 않는다고 말했다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이로써 오컴은 신학을 이성에서 떼어내고, 철학과 신학을 분리했다. 철학을 통해 신의 섭리를 이해해야 한다는 스콜라 철학도 해체시킨 것이다. 오컴은 더 나아가 신학과 이성이 별개라면 교회는 정치에 개입하면 안 된다고 주장한다. 당시 교황은 정치에 깊이 관여했으니, 당연히 오컴은 투옥되었다. 탈출에 성공해서 당시 교황과 다투던 루드비히 왕 밑에서 은신한다. 오컴은 이때 루드비히 왕에게 &quot;당신이 나를 칼로써 지켜주면 나는 당신을 펜으로써 지켜주겠다.&quot;고 하여, 또 하나의 유명한 말을 남겼다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;유명론과 경험주의&lt;/h4&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;유명론은 중세 전체를 지배한 실재론에 반하는 주장이다. 이데아와 유사한 보편자가 세계를 만든다는 사고에 대한 반대다. 한 마디로 관념론을 향한 비판이다. 이러한 반대는 주로 개별 사물이나 현실에 대한 지식을 강조하는 방식으로 제시됐다. 예를 들어, 이데아나 관념, 보편자에다가 사물을 꿰어 맞추는 게 아니라, 실제 사물들을 올바로 관찰하고 인식해서 정확한 지식이 만들어지리라는 것이다. 이런 의미에서 유명론이 어떤 관념이나 보편원리로써 전체를 다 설명하려는 경향에 대해 해체적이고 비판적인 효과를 갖는다는 건 분명하다.&amp;nbsp;&lt;u&gt;유명론이 점점 목소리를 키워간다는 사실은 경험을 향한 지적인 개방이 시작되었음을 의미한다.&lt;/u&gt; 이런 생각이 '경험주의'로 이어진 것이다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 로크 : 유명론과 근대 철학&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;로크의 입지점&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로크는 경험주의의 흐름을 만들어낸 사람이다. &lt;b&gt;로크의 철학을 떠받치고 있는 두 개의 지반이 있다. 하나는 데카르트가 새롭게 연 근대철학의 문제설정이다. 신에게서 독립한 주체, 그래서 존재, 인식, 가치의 새로운 중심이 된 근대적 주체가 로크 철학에서도 마찬가지로 중요한 지반이 됐다. 다른 하나는 갈릴레이, 뉴턴 등이 이룩한 과학혁명이다. 이제 과학은 진리에 이르는 가장 커다란 길, 어쩌면 유일한 길로 간주된다. 따라서 로크는 과학 발전을 가로막는 허구적인 원리나 개념을 없애는 '청소부' 역할을 자임한다. 이런 관점에 선 로크에게는 경험과 관찰만이 과학에 이르는 유일한 길이었다.&amp;nbsp;이런 사고 방식이 '경험주의'다. 영국 철학에서 주류를 이루는 입장이다.&lt;/b&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;유명론과 데카르트의 근대적 문제설정을 결합해 로크는 중세적 유명론과도, 데카르트적 근대철학과도 다른 독자적인 철학을 만들었다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;'본유관념' 없는 진리를 위하여&lt;/h4&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;로크의 딜레마&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로크는 '빨갛다', '노랗다' 같은 단순관념을 야기하는 것을 '물질적 실체'라고 한다. 이 물질적 실체(예를 들면 태양)가 우리(주체)의 감각을 자극해서 단순관념('빨갛다', '노랗다')이 생기도록 한다. 물론 물질적 실체는 우리가 어떻게 경험하든 불변인 채 있다.&amp;nbsp;다른 한편 태양을 보면 언제나 태양으로 인식해야 한다. 같은 걸 보고서 언제는 태양이라고 했다가, 언제는 찐빵이라고 하면 올바른 인식에 도달할 수 없다. 이처럼 인식의 불변적인 주체를 로크는 '정신적 실체'라고 부른다.&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;둘째로 진리에 관한 것. 이는 제1성질에 관한 것이다. 태양의 개수를 세어보자. 1개다. 태양의 개수를 1개가 아니라고 경험하는 사람은 없다. 그런데 똑같은 강의장 안의 온도가 누구에겐 따뜻한데, 누구에겐 썰렁하다. 태양의 숫자를 경험하는 것이나 강의장의 온도를 경험하는 것이나 '경험'하기는 마찬가지인데, 왜 달라지는 것일까? 이에 대해 로크는 말한다. 체감 온도는 그걸 느끼는 주체에 따라 달라지지만, 태양의 숫자는 주체와 상관없는 성질이기 때문이라고. 이처럼 주체에 따라 다르게 경험하는 성질을 '제2성질', 모든 사람이 동일하게 느끼는 성질을 '제1성질'이라고 한다. 제2성질은 경험 안에 있지만, 제1성질은 물체 자체에 속하는 성질이다.&amp;nbsp;진리가 가능한 이유는 제1성질 때문이다. 이 때문에 인식과 대상은 일치할 수 있고, 모든 사람이 동일하게 받아들이는 지식인 진리가 가능하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 생각해보자. 제1성질은 어떻게 해서 진리를 가져다 줄까? 로크에 따르면, 그건 사물에 속하는 성질이기 때문이다. 곧, 사물이 제1성질을 타고났기 때문이다. 따라서 제1성질은 사물이 갖는 타고난 성질이다.&amp;nbsp;로크는 데카르트의 본유관념을 유명론의 입장에서 비판하며 주체에서 본유관념을 떼어낸다. 그러나 진리가 가능하다는 걸 증명하려고 그는 그 성질을 사물에게 돌려준다. 제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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;유명론의 근대화&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;&lt;b&gt;로크는 과학을 기초로 유명론을 통해 경험주의 철학을 마련하려 했다. 그런데 로크 역시 (인식)주체에서 출발해 진리에 도달하려고 하는 근대적 문제설정 안에 있었고, 그러한 근대적 문제설정 안에서 과학이란 '대상과 일치하는 지식'임을 보증할 수 있었다. 그러기 위해서 로크는 물질과 정신이란 실체를 다시 끌어들여야 했다. 진리가 가능함을 보증하기 위해 '제1성질'도 만들어야 했다. 이런 실체(물질과 정신)와 제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;이는 결국 근대적 문제설정(특히 과학주의)와 유명론 사이의 갈등을 보여준다. 로크로선 어느 것 하나를 취할 수 없게 만드는 딜레마였다. 유명론이 근대적 문제설정 속에 포섭되면서 생기는, '근대화된 유명론'의 내적 긴장이요, 모순이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;버클리 : 유명론에서 관념론으로&lt;/h4&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성질'에 대한 비판이다. 로크는 대상의 성질이란 모두 인식주체가 경험한 것이요 주관적이라고 하면서, 오직 제1성질만은 예외로 둔다. 그러나 버클리는 제1성질만 유독 물질 그 자체에 속하는 객관적 성질이라고 할 이유가 없다고 한다. 그가 보기에 경험되지 않는 성질이란 알 수 없는 성질이요, 알 수 없는 성질이 있다는 건 모르는 것을 안다고 하는 말처럼 앞뒤가 안 맞는 주장이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 비판으로 버클리가 도달한 곳은 근대철학의 밑바닥이다. &lt;b&gt;물질적 실체를 가정하면 이것이 지식과 일치하는지 확인할 수 없는 문제가 발생한다. 이 문제를 방지하려면 '물질적 실체', 즉, '물질'이라는 개념을 없애 버려야 한다고 한다.&amp;nbsp;따라서 버클리는 이렇게 말한다. &quot;물질은 존재하지 않는다. 존재하는 것은 오직 지각된 것 뿐이다.&quot;&lt;/b&gt; 이런 과감한 주장을 할 수 있었던 까닭은 버클리가 주교였기 때문이다. 물질을 부정하면 과학이 불가능해진다. 그래서 로크는 예외를 만들었는데, 버클리는 과학을 향한 미련이 없기 때문에 예외를 두지 않았다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 이제 다른 문제가 생긴다. '아마존 구석에 있는 자그마한 풀'은 아무도 지각하지 않는데 그럼 존재하지 않는 걸까? 버클리는 이렇게 말한다. &quot;하느님이 지각하기 때문에 존재하고 있다오.&quot; 주교다운 대답이다. 그렇다면 유니콘도, 용도, 이데아라는 보편자도 하느님이 있는데 존재하지 않을 이유가 있을까? 아주 기묘한 방식으로 유명론은 실재론으로 바뀌고 마는 것이다.&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. 흄 : 근대 철학의 극한&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;과학주의에서 회의주의로&lt;/h4&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;확실한 네 가지 관계는 과학에 합당하지만, 인과관계를 비롯한 나머지 세 가지 관계는 과학을 구성할 수 없다고 한다. 그러나 모든 법칙은 인관관계에 의해 표시된다. 인과성 없이는 어떠한 법칙도 없으며, 법칙 없이는 어떠한 과학도 생각할 수 없다. 결국 흄은 과학의 불가능성, 진리의 불가능성을 입증하고 만다. 이로써 근대철학의 목표는 도달할 수 없는 지점이란 결론에 이르게 된다. 회의주의란 이러한 도달 불가능성을 표현하는 말인 셈이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;주체의 해체, 주체철학의 해체&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;버클리는 지각된 것을 관념, 지각하는 것을 정신이라고 한다. 어떤 물건을 '사과'로 인식한다면, '사과'가 관념이고 그걸 지각한 것이 정신이다. 버클리는 &quot;존재하는 것은 지각되는 것이다&quot;라며 지각되지 않는 것은 존재하지 않는다고 말했다. 그러나 지각하는 정신만은 지각되지 않지만 존재한다고 한다. 정신만은 실재한다고 한 것이다.&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;근대철학의 전복&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흄은 근대철학의 목표인 '진리' 혹은 '과학'이 불가능하다는 점을 보여줬다. 나아가 '주체' 자체가 결코 자명하지 않다는 점을 보여주었다. 이로써 근대철학에 위기가 찾아왔다.&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;b&gt;흄은 &quot;인간의 동일성, 나라는 주체의 동일성에 대한 견해를 엄밀히 검토한 결과, 나는 완전히 미궁에 빠져서 어떻게 그 견해들을 수정해야 할지도 어떻게 그것들을 일관되게 만들 수 있을지 솔직히 알 수 없다&quot;고 하면서 자신의 책 '오성론'을 끝낸다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;탈출도, 귀환도 아닌...&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흄에게 진리란 존재하지 않는다. 다만 참(진리)은 아니지만 사람들이 참으로 믿는 관념이 존재한다고 보았다. 흄은 결국 &quot;믿음이고 추론이고 다 거부하고 싶다&quot;고 말한다. 왜냐하면 진리를 찾아야 하는데 결국 '진리는 없다'로 판단된 셈이고, 진리를 찾고 싶은데 진리가 아닌 것만 있다는 이야기밖에 못했으니 말이다. &lt;/b&gt;결국 그는 근대의 외부로 나가자마자 다시 내부로 돌아오고 마는 것이다.&lt;/p&gt;</description>
      <category>책과 사유</category>
      <category>철굴</category>
      <category>철굴 독후감</category>
      <category>철굴 비평</category>
      <category>철굴 서평</category>
      <category>철굴 해제</category>
      <category>철학 개론서</category>
      <category>철학 입문서</category>
      <category>철학과 굴뚝 청소부 독후감</category>
      <category>철학과 굴뚝청소부 서평</category>
      <category>철학과 굴뚝청소부 소개</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/311</guid>
      <comments>https://bkshin.tistory.com/entry/%EC%9D%B4%EC%A7%84%EA%B2%BD-%EC%B2%A0%ED%95%99%EA%B3%BC-%EA%B5%B4%EB%9A%9D%EC%B2%AD%EC%86%8C%EB%B6%80-12%EB%B6%80#entry311comment</comments>
      <pubDate>Thu, 6 Jul 2023 00:54:42 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터 비전 - 14. 스타일 전이(Style Transfer)</title>
      <link>https://bkshin.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-14-%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%A0%84%EC%9D%B4Style-Transfer</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 스타일 전이(Style Transfer)의 원리를 알아보고, 코드로 실습까지 해보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스타일 전이(Style Transfer)의 원리&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;스타일 전이란 콘텐츠 이미지(content image)에 스타일 이미지(style image)의 화풍을 적용해 새로운 이미지를 생성하는 기법을 말합니다. 아래 예시를 보시죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;1376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LujXI/btsiBKl7qty/z7HnjB2Dtl5jqChMbiB0ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LujXI/btsiBKl7qty/z7HnjB2Dtl5jqChMbiB0ak/img.png&quot; data-alt=&quot;출처-Image Style Transfer Using Convolutional Neural Networks 논문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LujXI/btsiBKl7qty/z7HnjB2Dtl5jqChMbiB0ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLujXI%2FbtsiBKl7qty%2Fz7HnjB2Dtl5jqChMbiB0ak%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;1210&quot; height=&quot;1376&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;1376&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-Image Style Transfer Using Convolutional Neural Networks 논문&lt;/figcaption&gt;
&lt;/figure&gt;
&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;먼저, 스타일 전이를 적용하려면 사전 훈련된(pre-trained) CNN 모델을 사용해야 합니다. &lt;a href=&quot;https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Style Transfer 논문&lt;/a&gt;에서는 VGG19 네트워크를 사용했습니다. 스타일 전이 훈련 시에는 VGG19 네트워크의 가중치는 고정한 뒤 이미지의 픽셀을 직접 변경하면서 훈련합니다. 모델 훈련이라고 하면 일반적으로는 가중치를 업데이트하는 걸 말합니다. 하지만 스타일 전이에서는 가중치는 고정한 채, 이미지의 픽셀을 변경하면서 업데이트를 합니다. 다시 말해 아래와 같은 방식으로 훈련이 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm7yMv/btsiNcWAWhv/l9XQwOuseJ3OkXtr3LyIj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm7yMv/btsiNcWAWhv/l9XQwOuseJ3OkXtr3LyIj1/img.png&quot; data-alt=&quot;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm7yMv/btsiNcWAWhv/l9XQwOuseJ3OkXtr3LyIj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm7yMv%2FbtsiNcWAWhv%2Fl9XQwOuseJ3OkXtr3LyIj1%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;1928&quot; height=&quot;489&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&lt;/figcaption&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;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1952&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6DZDp/btsiBKNlML3/Hbh9uCE17oOkc2uAuR5Vy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6DZDp/btsiBKNlML3/Hbh9uCE17oOkc2uAuR5Vy0/img.png&quot; data-alt=&quot;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6DZDp/btsiBKNlML3/Hbh9uCE17oOkc2uAuR5Vy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6DZDp%2FbtsiBKNlML3%2FHbh9uCE17oOkc2uAuR5Vy0%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;1952&quot; height=&quot;854&quot; data-origin-width=&quot;1952&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜덤 노이즈 이미지(x)는 콘텐츠 이미지(p)와 스타일 이미지(a)를 결합해 새로운 이미지(result x)를 생성합니다. 우선 이미지는 행과 열로 구성돼 있습니다. 그렇지만 계산을 쉽게 하기 위해 하나의 이미지를 하나의 벡터로 표현합니다(p, a, x 등). 그냥 행, 열을 일렬로 쭉 나열해 벡터로 표현했다고 보면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노이즈 이미지에서 시작해 콘텐츠 정보와 스타일 정보를 모두 가져오면서 훈련을 합니다. 여기서 콘텐츠 손실(L_content)이 줄어든다는 건 콘텐츠의 이미지를 잘 가져왔다는 뜻이고, 스타일 손실(L_sytle)이 줄어든다는 건 스타일의 화풍을 잘 가져왔다는 말입니다. &amp;alpha;는 콘텐츠 손실의 가중치, &amp;beta;는 스타일 손실의 가중치입니다. 각 가중치가 클수록 해당 손실값을 더 중요하게 여깁니다. 콘텐츠 손실의 가중치(&amp;alpha;)와 스타일 손실의 가중치(&amp;beta;) 비율에 따라 생성되는 이미지가 다르다는 말입니다. 다시 말해 &amp;alpha;가 클수록 콘텐츠의 이미지를 잘 복원합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;1316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyTEaN/btsiOIUR5nB/QU9uKiH6ffWGkVoPGmcnKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyTEaN/btsiOIUR5nB/QU9uKiH6ffWGkVoPGmcnKK/img.png&quot; data-alt=&quot;출처-https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyTEaN/btsiOIUR5nB/QU9uKiH6ffWGkVoPGmcnKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyTEaN%2FbtsiOIUR5nB%2FQU9uKiH6ffWGkVoPGmcnKK%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;562&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;1316&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;왼쪽 상단 그림의 가중치 비율(&amp;alpha; / &amp;beta;)은 10^-4입니다. 스타일 손실 가중치(&amp;beta;)가 콘텐츠 손실 가중치(&amp;alpha;)보다 10,000배 크다는 뜻이죠. 스타일 손실의 가중치가 크면 클수록 원본 콘텐츠를 확인하기 어렵네요.&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;1970&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOJUeB/btsiOHaOvx9/aGiQi2tMuyDLMBWkOtlKE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOJUeB/btsiOHaOvx9/aGiQi2tMuyDLMBWkOtlKE1/img.png&quot; data-alt=&quot;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOJUeB/btsiOHaOvx9/aGiQi2tMuyDLMBWkOtlKE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOJUeB%2FbtsiOHaOvx9%2FaGiQi2tMuyDLMBWkOtlKE1%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;1970&quot; height=&quot;800&quot; data-origin-width=&quot;1970&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노이즈 이미지(x)가 CNN 네트워크를 거쳐 특정한 피처 맵(F)이 됐습니다. 콘텐츠 이미지(p)도 동일한 CNN 네트워크를 거쳐 피처 맵(p)이 됐고요. 입력 이미지만 다를 뿐이지 네트워크는 동일합니다. 이때, l은 레이어(layer)의 인덱스, i는 피처맵상 채널의 위치, j는 벡터상 활성화(activation) 값의 위치를 의미합니다. 예컨대, 기호 F_ij^l 가 나타내는 의미는 l번째 레이어에서 i번째 채널에서의 j번째 활성화 값을 뜻합니다. 노이즈 이미지와 콘텐츠 이미지 각각에 대하여 '같은 레이어에서 같은 채널에서의 같은 활성화 값'을 구해 손실값을 구한 거죠. 이게 바로 콘텐츠 손실값입니다. 콘텐츠 손실값 덕분에 두 이미지(노이즈 이미지와 콘텐츠 이미지)의 활성화 값이 비슷해지도록 훈련됩니다. 요약하면 훈련하는 과정에서 노이즈 이미지가 콘텐츠 이미지와 비슷해진다는 이야기입니다.&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;스타일이 비슷하다는 말은 상관관계가 높다는 뜻입니다. 그리고 두 피처 간 상관관계는 두 피처의 내적(dot product)으로 나타낼 수 있습니다. 두 피처 간 패턴이 비슷하면 내적이 크고, 패턴이 다르면 내적도 작기 때문이죠. 이때 특정 레이어에 있는 피처 간 모든 조합별 상관관계를 Matrix 형태로 구한 것을 Gram Matrix라고 합니다. 아래 그림을 보시죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;782&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NRe0V/btsiOKd9qvx/ifzWKsqIkYBdaU4pjdRJ01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NRe0V/btsiOKd9qvx/ifzWKsqIkYBdaU4pjdRJ01/img.png&quot; data-alt=&quot;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NRe0V/btsiOKd9qvx/ifzWKsqIkYBdaU4pjdRJ01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNRe0V%2FbtsiOKd9qvx%2FifzWKsqIkYBdaU4pjdRJ01%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;1968&quot; height=&quot;782&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;782&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예컨대 Gram Matrix의 1행 2열(G_11) 값은 피처 1과 피처 2 사이의 상관관계(즉, 내적)를 말합니다. Gram Matrix의 행과 열 크기는 해당레이어의 채널수(여기선 4)와 같습니다. 위 그림에서 표시된 상관관계 수식(G_ij)에서 i, j는 서로 다른 채널(즉 서로 다른 피처)의 인덱스를 말하고, k는 피처에 존재하는 각각의 원소(활성화값)의 위치를 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타일과 관련한 훈련을 할 때는 노이즈 이미지의 Gram Matrix와 스타일 이미지의 Gram Matrix의 차이가 줄어들도록 훈련합니다. 스타일 손실은 아래 수식과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1964&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVGN18/btsiNakisHq/IKnT4oZdp3wQcMVhGYNcWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVGN18/btsiNakisHq/IKnT4oZdp3wQcMVhGYNcWK/img.png&quot; data-alt=&quot;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVGN18/btsiNakisHq/IKnT4oZdp3wQcMVhGYNcWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVGN18%2FbtsiNakisHq%2FIKnT4oZdp3wQcMVhGYNcWK%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;1964&quot; height=&quot;754&quot; data-origin-width=&quot;1964&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/Style%20Transfer.pdf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;G는 노이즈 이미지(x)에서 구한 Gram Matrix, A는 스타일 이미지에서 구한 Gram Matrix입니다. 두 Matrix의 원소별 차이를 스타일 손실로 잡습니다. 곧, 두 이미지의 Gram Matrix가 비슷해지도록 훈련하게 되죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식에서 N_l은 레이어 l에서의 피처맵 개수(채널수), M_l은 레이어 l에서의 '피처의 높이 x 피처의 너비'(즉, 벡터의 개수)를 의미합니다. 이 값들로 나눠주는 까닭은 정규화를 하기 위해서입니다. 일반적인 CNN에서 레이어가 깊어질수록 채널수가 많아지고 피처맵의 너비와 높이가 줄어듭니다. 레이어에 따라 Gram Matrix 값의 범위가 달라지는 현상을 막기 위해 정규화를 해주는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 콘텐츠 손실은 하나의 레이어에서만 구합니다. 반면 스타일 손실은 5개의 레이어에서 구합니다. 레이어 5개 각각에서 Gram Matrix를 구한 뒤, 각 레이어마다의 Gram Matrix가 비슷해지도록 업데이트를 하는 것이죠. 이때 어떤 레이어에 가중치를 줄지 결정하는 매개변수가 w_l입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘텐츠 손실을 1개의 레이어에 대해서, 스타일 손실은 5개의 레이어에 대해서 구한다고 했죠? 총 6개의 레이어가 VGG19 네트워크에서 어떤 레이어인지 알아보죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbQBqI/btsiRERAwVC/mzUHBrY8tMPB3dIJrveU61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbQBqI/btsiRERAwVC/mzUHBrY8tMPB3dIJrveU61/img.png&quot; data-alt=&quot;출처-https://wikidocs.net/165427&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbQBqI/btsiRERAwVC/mzUHBrY8tMPB3dIJrveU61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbQBqI%2FbtsiRERAwVC%2FmzUHBrY8tMPB3dIJrveU61%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;705&quot; height=&quot;466&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://wikidocs.net/165427&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파란색으로 표시한 block1_conv1부터 block5_conv1까지가 스타일 손실을 구하는 레이어입니다. 빨간색으로 표시한 block4_conv2가 콘텐츠 손실을 구하는 레이어이고요.&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;2192&quot; data-origin-height=&quot;1212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CVCpx/btsiQ6gtkqS/oKUPcdqJMYKR1rBDJeWQCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CVCpx/btsiQ6gtkqS/oKUPcdqJMYKR1rBDJeWQCK/img.png&quot; data-alt=&quot;출처-https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CVCpx/btsiQ6gtkqS/oKUPcdqJMYKR1rBDJeWQCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCVCpx%2FbtsiQ6gtkqS%2FoKUPcdqJMYKR1rBDJeWQCK%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;2192&quot; height=&quot;1212&quot; data-origin-width=&quot;2192&quot; data-origin-height=&quot;1212&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처-https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 랜덤 노이즈 이미지(x)는 스타일 이미지(a)에서 스타일 정보를 가져오고, 콘텐츠 이미지(p)에서 콘텐츠 정보를 가져오며 훈련을 합니다. 스타일 손실을 구하기 위해 5개 레이어에서 Gram Matrix를 구합니다. 노이즈 이미지를 입력한 동일한 네트워크에서도 같은 레이어 5개에서 Gram Matrix를 구합니다. 두 Gram Matrix의 차이를 바탕으로 스타일 손실(L_style)을 구했죠. 콘텐츠 손실은 1개 레이어로만 구합니다. '노이즈 이미지를 전달한 네트워크 내 특정 레이어'와 '콘텐츠 이미지를 전달한 (동일한) 네트워크 내 특정 레이어' 사이의 손실값(L_content)을 구했죠. 스타일 손실(L_style)과 콘텐츠 손실(L_content)에 각각 가중치 &amp;beta;와 &amp;alpha;를 곱한 뒤, 두 값을 합하면 최종 손실값이 됩니다. 이 손실값을 최소화하는 방향으로 스타일 전이가 이루어집니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 이미지 재건(Image Reconstruction)&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;2062&quot; data-origin-height=&quot;1422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0dkI4/btsiu0Qqlam/5fJM9UGGs7A2unzQ0zRua0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0dkI4/btsiu0Qqlam/5fJM9UGGs7A2unzQ0zRua0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0dkI4/btsiu0Qqlam/5fJM9UGGs7A2unzQ0zRua0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0dkI4%2Fbtsiu0Qqlam%2F5fJM9UGGs7A2unzQ0zRua0%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;2062&quot; height=&quot;1422&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;1422&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;먼저 위쪽의 스타일 재건을 보시죠. a부터 e이미지까지 생성된 스타일 이미지가 다르죠? 어떤 레이어를 바탕으로 스타일 손실을 잡았는지에 따라 최종 생성된 스타일 이미지가 다릅니다. 아래와 같이 손실값을 구할 레이어를 잡았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(a) &amp;rarr; conv1_1,&lt;br /&gt;(b) &amp;rarr;&amp;nbsp;conv1_1, conv2_1&lt;br /&gt;(c) &amp;rarr;&amp;nbsp;conv1_1, conv2_1, conv3_1&lt;br /&gt;(d) &amp;rarr; conv1_1, conv2_1, conv3_1, conv4_1&lt;br /&gt;(e) &amp;rarr;&amp;nbsp;conv1_1, conv2_1, conv3_1, conv4_1, conv5_1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;레이어를 많이 포함할수록 스타일(화풍)을 더 잘 재건하네요. 참고로, Gram Matrix(Styel Representation)의 크기는 뒤쪽 레이어일수록 커집니다. Gram Matrix의 크기는 채널수와 같은데, 뒤쪽 레이어일수록 피처의 크기가 작아지면서 채널수가 커집니다. 그래서 앞쪽 레이어보다 뒤쪽 레이어의 Gram Matrix 크기가 더 크네요.&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) &amp;rarr;&amp;nbsp;conv1_2&lt;br /&gt;(b) &amp;rarr; conv2_2&lt;br /&gt;(c) &amp;rarr;&amp;nbsp;conv3_2&lt;br /&gt;(d) &amp;rarr;&amp;nbsp;conv4_2&lt;br /&gt;(e) &amp;rarr;&amp;nbsp;conv5_2&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;h3 style=&quot;color: #333333; text-align: start;&quot; 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;두 번째 문제는 스타일이 무엇인지 정확히 정의하기 어렵다는 점입니다. 우리는 직관적으로 스타일이 무엇인지 이해하지만, 논리적으로 혹은 수식으로 정의하긴 어려울 것 같습니다. 아래 스타일 전이 예시를 보시죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HtRGT/btsiPQLDDUV/4kyYB9YtNq8NPs2Qa86tA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HtRGT/btsiPQLDDUV/4kyYB9YtNq8NPs2Qa86tA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HtRGT/btsiPQLDDUV/4kyYB9YtNq8NPs2Qa86tA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHtRGT%2FbtsiPQLDDUV%2F4kyYB9YtNq8NPs2Qa86tA0%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;600&quot; height=&quot;553&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타일 이미지에서 스타일을 따와서, 콘텐츠 이미지에 잘 적용했네요. 그런데 여기서 스타일이란 무엇인지를 명확하게 말하긴 힘듭니다. 대략 색감 정도라고 밖에 말할 수 없겠군요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스타일 전이 실습&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 스타일 전이의 원리를 알아봤습니다. 이번에는 코드로 간단하게 구현해보겠습니다. 코드는 텐서플로의 &lt;a href=&quot;https://www.tensorflow.org/tutorials/generative/style_transfer?hl=en&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Neural style transfer 튜토리얼&lt;/a&gt;을 바탕으로 작성했습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;아래&amp;nbsp;코드는&amp;nbsp;구글&amp;nbsp;Colab을&amp;nbsp;바탕으로&amp;nbsp;설명합니다.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 사전 훈련된 VGG19 모델 불러오기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 라이브러리를 불러옵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952055116&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 이미지넷으로 사전 훈련된 VGG19 네트워크를 불러오겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952066263&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;network = tf.keras.applications.VGG19(include_top=False, weights='imagenet')&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;include_top=False :&amp;nbsp;&amp;nbsp;전결합층(fully-connected layers)은 제외하고 오직 합성곱 계층(convolutional layers)과 풀링 계층(pooling layers)만 가져오겠다는 뜻입니다. 불러온 VGG19 네트워크로 분류를 할 건 아니므로, 마지막 전결합층은 빼준 것입니다.&lt;/li&gt;
&lt;li&gt;weights='imagenet'&amp;nbsp;:&amp;nbsp;이미지넷&amp;nbsp;데이터셋으로&amp;nbsp;사전&amp;nbsp;훈련된&amp;nbsp;모델을&amp;nbsp;불러오겠다는&amp;nbsp;말입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불러온 VGG19 네트워크의 아키텍처를 살펴보시죠.&lt;/p&gt;
&lt;pre id=&quot;code_1685952163446&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;network.summary()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공간 제약상 출력 결과는 생략하겠습니다. 인풋 레이어부터 최종 block5_pool 레이어까지 잘 출력이 됩니다. include_top=False로 설정해서 불러왔기 때문에 전결합층은 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 레이어 개수를 살펴보기 위해 len(network.layers)를 출력하면 22가 나오네요. 레이어 개수가 22개입니다.&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;다음으로는 스타일 전이에 사용할 콘텐츠 이미지와 스타일 이미지를 불러와 전처리를 해보겠습니다. 이미지를 먼저 구글 드라이브 저장합니다. 그다음 저장된 이미지를 Colab에 불러와 사용해보겠습니다. 구글 드라이브에 접근하기 위해 마운트를 먼저 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1685952294082&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from google.colab import drive
drive.mount('/content/drive')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘텐츠 이미지부터 불러와보죠. unsplash에서 다운로드한 코뿔소 이미지입니다(이미지 출처 : &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/jBjQA3LU9Dc&quot;&gt;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/jBjQA3LU9Dc&lt;/a&gt;).&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1685952304017&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;content_image_path = '/content/drive/MyDrive/colab/Computer-Vision-Course/Data/Images/rhinoceros.jpg'
content_image = tf.keras.preprocessing.image.load_img(content_image_path)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불러온 이미지를 출력해보죠.&lt;/p&gt;
&lt;pre id=&quot;code_1685952338384&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plt.imshow(content_image);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x2dqZ/btsiJzRVC8z/dh9hd798c7fe3BKe6RLpu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x2dqZ/btsiJzRVC8z/dh9hd798c7fe3BKe6RLpu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x2dqZ/btsiJzRVC8z/dh9hd798c7fe3BKe6RLpu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx2dqZ%2FbtsiJzRVC8z%2Fdh9hd798c7fe3BKe6RLpu1%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;425&quot; height=&quot;418&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tf.keras.preprocessing.image.load_img()로 불러온 이미지는 PIL 타입입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952365334&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type(content_image)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; PIL.JpegImagePlugin.JpegImageFile&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텐서플로로 스타일 전이 작업을 하려면 PIL 타입을 넘파이 타입으로 바꿔줘야 합니다. img_to_array() 메서드로 구현할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952386765&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Convert PIL image to numpy type to work with TensorFlow
content_image = tf.keras.preprocessing.image.img_to_array(content_image)

type(content_image), content_image.shape, content_image.min(), content_image.max()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; (numpy.ndarray, (283, 283, 3), 0.0, 255.0)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넘파이 타입으로 잘 바뀌었습니다. 형상은 (283, 283, 3)이네요. 가로, 세로 크기가 각각 283이고, 채널수가 3개(RGB)라는 말입니다. 이미지의 픽셀 최솟값, 최댓값은 각각 0.0과 255.0입니다. 스타일 전이 작업을 위해서는 픽셀 범위를 정규화해줘야 합니다. 모든 픽셀을 255로 나눠 0~1 사잇값으로 정규화하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952407733&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Normalizing
content_image = content_image / 255

content_image.min(), content_image.max()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; (0.0, 1.0)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규화가 잘 됐네요. 이어서 차원을 하나 더하겠습니다. 이미지를 딥러닝 모델에 전달하려면 배치 크기에 해당하는 차원이 하나 더 있어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952427370&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;content_image = content_image[tf.newaxis, :]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차원을 하나 추가했으니, 최종 형상을 출력해보죠.&lt;/p&gt;
&lt;pre id=&quot;code_1685952437409&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;content_image.shape&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; (1, 283, 283, 3)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 형상이 (283, 283, 3)이었는데, 맨 앞에 배치 크기에 해당하는 차원이 더해졌네요. 이로써 콘텐츠 이미지를 불러오고 전처리(넘파이 타입으로 변경, 정규화, 차원 추가) 작업까지 해줬습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 스타일 이미지를 불러와서 같은 전처리 작업을 하겠습니다. 스타일 이미지로는 반 고흐의 'starry night'를 사용하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952487910&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;style_image_path = '/content/drive/MyDrive/colab/Computer-Vision-Course/Data/Images/starrynight.jpg'
style_image = tf.keras.preprocessing.image.load_img(style_image_path)

plt.imshow(style_image);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cie26B/btsiBKGj1OQ/JrOfOihFVzSKgHyGEpcrjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cie26B/btsiBKGj1OQ/JrOfOihFVzSKgHyGEpcrjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cie26B/btsiBKGj1OQ/JrOfOihFVzSKgHyGEpcrjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcie26B%2FbtsiBKGj1OQ%2FJrOfOihFVzSKgHyGEpcrjk%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;520&quot; height=&quot;418&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 전처리 작업을 하겠습니다. 콘텐츠 이미지 때와 마찬가지로 넘파이 타입 변경, 정규화, 차원추가를 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952509341&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Preprocessing
style_image = tf.keras.preprocessing.image.img_to_array(style_image)
style_image = style_image / 255
style_image = style_image[tf.newaxis, :]

style_image.shape&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; (1, 560, 600, 3)&lt;/span&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;지금까지 사전 훈련된 VGG19 네트워크를 불러왔고, 전처리한 이미지까지 준비했습니다. 이제는 본격적으로 스타일 전이 네트워크를 만들어보겠습니다. 네트워크를 만들기 위해서 콘텐츠 레이어와 스타일 레이어를 정해야 합니다. 콘텐츠 레이어는 노이즈 이미지와 콘텐츠 이미지 사이의 손실을 구하는 레이어입니다. 스타일 레이어는 노이즈 이미지와 스타일 이미지 사이의 손실을 구하는 레이어고요. 논문에서와 마찬가지로 콘텐츠 레이어는 한 개, 스타일 레이어는 5개로 정했습니다. 각 레이어의 이름을 리스트로 할당하고, 레이어의 개수도 변수로 지정했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952615796&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;content_layers = ['block4_conv2']
style_layers = ['block1_conv1', 'block2_conv1', 'block3_conv1', 'block4_conv1', 'block5_conv1']

num_content_layers = len(content_layers)
num_style_layers = len(style_layers)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타일 레이어의 출력값을 볼까요? 총 다섯 가지입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952651582&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[network.get_layer(name).output for name in style_layers]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;[&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;64)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block1_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;128)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block2_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;256)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block3_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;512)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block4_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;512)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block5_conv1')&amp;gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값을 얻으려면 input을 호출하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952696830&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;network.input&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;3)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'input_1')&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이젠 스타일 전이를 위한 VGG 레이어를 정의해보죠. 먼저 VGG 네트워크를 불러온 뒤, 입력받은 레이어(콘텐츠 레이어와 스타일 레이어를 전달할 것임)마다 출력값을 내도록 정의합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952714890&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def build_vgg_layers(layer_names):
    '''return output activation value'''
    vgg = tf.keras.applications.VGG19(include_top=False, weights='imagenet')
    vgg.trainable = False

    outputs = [vgg.get_layer(name).output for name in layer_names]
    network = tf.keras.Model(inputs=[vgg.input], outputs=outputs)

    return network&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 정의한 build_vgg_layers() 함수에 스타일 레이어를 전달해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1685952729811&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# extract image style
style_extractor = build_vgg_layers(style_layers)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 보려면 style_extractor.summary()를 출력해보면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;style_extractor의 출력값을 볼까요?&lt;/p&gt;
&lt;pre id=&quot;code_1685952756044&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;style_extractor.outputs&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;[&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;64)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block1_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;128)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block2_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;256)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block3_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;512)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block4_conv1')&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt;KerasTensor:&amp;nbsp;shape=(None,&amp;nbsp;None,&amp;nbsp;None,&amp;nbsp;512)&amp;nbsp;dtype=float32&amp;nbsp;(created&amp;nbsp;by&amp;nbsp;layer&amp;nbsp;'block5_conv1')&amp;gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타일 레이어의 출력값이므로 총 5개입니다. 이 style_extractor에 실제 스타일 이미지를 전달해서 5가지 출력값의 형상을 출력해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952833370&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 5 values with ReLU activation are applied
style_outputs = style_extractor(style_image)

style_outputs[0].shape, style_outputs[1].shape, style_outputs[2].shape, style_outputs[3].shape, style_outputs[4].shape&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(TensorShape([1,&amp;nbsp;560,&amp;nbsp;600,&amp;nbsp;64]),&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;TensorShape([1,&amp;nbsp;280,&amp;nbsp;300,&amp;nbsp;128]),&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;TensorShape([1,&amp;nbsp;140,&amp;nbsp;150,&amp;nbsp;256]),&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;TensorShape([1,&amp;nbsp;70,&amp;nbsp;75,&amp;nbsp;512]),&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;TensorShape([1,&amp;nbsp;35,&amp;nbsp;37,&amp;nbsp;512]))&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 5가지 출력값이 반환됐네요. (배치 크기, 이미지 크기1, 이미지 크기2, 채널수)를 의미합니다. 앞쪽 레이어일수록 이미지 크기가 크고 채널수가 적습니다. 뒤로 갈수록 이미지 크기가 작아지고 채널수가 많아지고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 Gram Matrix를 구하는 함수를 정의해봅시다. 아래 코드는 텐서플로 튜토리얼에서 그대로 가지고 왔습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952922215&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# https://www.tensorflow.org/api_docs/python/tf/einsum

# Loss between the style and the content image (see original paper, section 2.2)
def gram_matrix(layer_activation):
    result = tf.linalg.einsum('bijc,bijd-&amp;gt;bcd', layer_activation, layer_activation)
    input_shape = tf.shape(layer_activation)
    num_locations = tf.cast(input_shape[1] * input_shape[2], tf.float32)

    return result / num_locations  # Normalizing&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gram Matrix의 예시를 보려면 gram_matrix(style_outputs[0])를 출력해보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 스타일 전이를 위한 모델 클래스를 만들어보겠습니다. __init__ 함수에는 build_vgg_lagyers()에 스타일 레이어와 콘텐츠 레이어 모두를 전달합니다.&amp;nbsp; 이어서 call() 함수를 정의할 때는 입력값에 255를 곱합니다. 입력값이 0~1 사잇값이므로 이를 역정규화하기 위함이죠. 이 값을 VGG19 모델에 넣기 위해 전처리 작업을 합니다. vgg19.preprocess_input() 메서드로 구현할 수 있습니다. 최종 출력값 중 첫 5개는 스타일 레이어의 출력값이고, 나머지 하나는 콘텐츠 레이어의 출력값입니다. 이 출력값들을 딕셔너리로 저장해 반환합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952956416&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class StyleContentModel(tf.keras.models.Model):
    '''Build a model that returns the style and content tensors.'''
    def __init__(self, style_layers, content_layers):
        super().__init__() 
        self.vgg = build_vgg_layers(style_layers + content_layers)
        self.style_layers = style_layers
        self.content_layers = content_layers
        self.num_style_layers = len(style_layers)
        self.vgg.trainable = False  # Because this network won't be trained

    def call(self, inputs):
        inputs = inputs * 255.0  # Denormalizing (Expects float input in [0,1])
        # Data is preprocessed and passed to the VGG (normalized from -127.50 to +127.50)
        preprocessed_input = tf.keras.applications.vgg19.preprocess_input(inputs)
        outputs = self.vgg(preprocessed_input)
        style_outputs = outputs[:self.num_style_layers]
        content_outputs = outputs[self.num_style_layers:]

        style_outputs = [gram_matrix(style_output) for style_output in style_outputs]

        content_dict = {content_name: value for content_name, value in zip(self.content_layers, content_outputs)}
        style_dict = {style_name: value for style_name, value in zip(self.style_layers, style_outputs)}

        return {'content': content_dict, 'style': style_dict}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타일 전이를 위한 extractor를 만들기 위해 앞서 만든 StyleContentModel 클래스에 스타일 레이어와 콘텐츠 레이어를 전달합니다. 여기서 style_layers와 content_layers는 각각 스타일 레이어 이름과 콘텐츠 레이어 이름이 담긴 리스트입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952977971&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;extractor = StyleContentModel(style_layers, content_layers)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 extractor에 콘텐츠 이미지를 전달해 출력값을 result에 저장해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685952993397&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;results = extractor(content_image)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 그 값(딕셔너리 형태로 반환한다고 했죠?)을 출력해보시죠.&lt;/p&gt;
&lt;pre id=&quot;code_1685953003282&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for key, value in results.items():
    print(key, value.keys())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;content&amp;nbsp;dict_keys(['block4_conv2'])&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;style&amp;nbsp;dict_keys(['block1_conv1',&amp;nbsp;'block2_conv1',&amp;nbsp;'block3_conv1',&amp;nbsp;'block4_conv1',&amp;nbsp;'block5_conv1'])&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘텐츠 레이어와 스타일 레이어의 이름이 출력됐네요. 스타일 타깃값과 콘텐츠 타깃값을 잡으려면 다음과 같이 key 값으로 지정해주면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685953029327&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;style_targets = extractor(style_image)['style']
content_targets = extractor(content_image)['content']&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;초기 노이즈 이미지는 new_image 변수에 할당하겠습니다. 옵티마이저는 Adam으로 하고 학습률은 0.07로 해보겠습니다. 콘텐츠 가중치와 스타일 가중치는 각각 1과 1,000으로 잡겠습니다. 에폭은 200번 돌리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타일 손실, 콘텐츠 손실을 각각 구한 뒤, 두 손실의 합을 최종 손실로 잡습니다. 최종 손실 값이 작아지도록 모델을 훈련하며 new_image를 갱신하는 겁니다. 최종적으로 구한 new_image는 0~1 사잇값을 갖도록 클리핑까지 해주었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1685953106361&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;new_image = tf.Variable(content_image)
optimizer = tf.optimizers.Adam(learning_rate=0.07)

content_weight = 1  # The greater the content weight, the greater the retention of the original image content
style_weight = 1000  # The greater the style weight, the more styles are preserved

num_epochs = 200
verbose = 25

for epoch in range(num_epochs):
    with tf.GradientTape() as tape:
        outputs = extractor(new_image)

        content_outputs = outputs['content']
        style_outputs = outputs['style']

        content_loss = tf.add_n([tf.reduce_mean((content_outputs[name] - content_targets[name]) ** 2) for name in content_outputs.keys()])
        content_loss *= content_weight / num_content_layers

        style_loss = tf.add_n([tf.reduce_mean((style_outputs[name] - style_targets[name]) ** 2) for name in style_outputs.keys()])
        style_loss *= style_weight / num_style_layers

        total_loss = content_loss + style_loss

    gradient = tape.gradient(total_loss, new_image)
    optimizer.apply_gradients([(gradient, new_image)])

    new_image.assign(tf.clip_by_value(new_image, 0.0, 1.0))

    if (epoch + 1) % verbose == 0:
        print(f'Epoch {epoch + 1} | content loss: {content_loss} | style loss: {style_loss} | total loss {total_loss}')
        plt.imshow(tf.squeeze(new_image, axis=0))
        plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Epoch&amp;nbsp;200&amp;nbsp;|&amp;nbsp;content&amp;nbsp;loss:&amp;nbsp;599827.125&amp;nbsp;|&amp;nbsp;style&amp;nbsp;loss:&amp;nbsp;42334543872.0&amp;nbsp;|&amp;nbsp;total&amp;nbsp;loss&amp;nbsp;42335141888.0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8UHN9/btsiQHguSxk/s1P6MHdRoTu2e29GVt2CJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8UHN9/btsiQHguSxk/s1P6MHdRoTu2e29GVt2CJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8UHN9/btsiQHguSxk/s1P6MHdRoTu2e29GVt2CJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8UHN9%2FbtsiQHguSxk%2Fs1P6MHdRoTu2e29GVt2CJK%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;425&quot; height=&quot;418&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤가요? 코뿔소 사진이 고흐 화풍 같아졌나요? 물론 여기서는 빠르게 결과를 보기 위해 해상도도 아주 낮은(한 장에 100KB가 안 되는) 사진을 사용했습니다. 좋은 해상도의 사진을 사용해보고, 콘텐츠/스타일 가중치, 학습률, 에폭 등의 파라미터도 조정해보면 더 품질 좋은 이미지가 나올 겁니다. 물론 그만큼 훈련 시간은 오래 걸리죠.&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;pre id=&quot;code_1685953220018&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(30, 8))
ax1.imshow(tf.squeeze(content_image, axis=0))
ax1.set_title('Content image')
ax2.imshow(tf.squeeze(new_image, axis=0))
ax2.set_title('New image')
ax3.imshow(tf.squeeze(style_image, axis=0))
ax3.set_title('Style image')
plt.axis('off');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2347&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wXCEU/btsiOiPtpBK/CJahTMKxwHaBmgLH64DVl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wXCEU/btsiOiPtpBK/CJahTMKxwHaBmgLH64DVl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wXCEU/btsiOiPtpBK/CJahTMKxwHaBmgLH64DVl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwXCEU%2FbtsiOiPtpBK%2FCJahTMKxwHaBmgLH64DVl1%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;2347&quot; height=&quot;682&quot; data-origin-width=&quot;2347&quot; data-origin-height=&quot;682&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2600&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DGByJ/btsiM9rTN8m/iAUqIkLbk1gJecKVsXuV4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DGByJ/btsiM9rTN8m/iAUqIkLbk1gJecKVsXuV4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DGByJ/btsiM9rTN8m/iAUqIkLbk1gJecKVsXuV4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDGByJ%2FbtsiM9rTN8m%2FiAUqIkLbk1gJecKVsXuV4K%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;2600&quot; height=&quot;754&quot; data-origin-width=&quot;2600&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Style Transfer 논문&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.udemy.com/course/best-computer-vision/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Jones&amp;nbsp;Granatyr(Udemy)&amp;nbsp;-&amp;nbsp;&quot;Computer&amp;nbsp;Vision:&amp;nbsp;Master&amp;nbsp;Class&quot;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=va3e2c4uKJk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;동빈나 - &quot;CNN을 활용한 스타일 전송(Style Transfer) | 꼼꼼한 딥러닝 논문 리뷰와 코드 실습&quot;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.tensorflow.org/tutorials/generative/style_transfer?hl=en&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TensorFlow - &quot;Neural style transfer&quot;&lt;/a&gt;&lt;/p&gt;</description>
      <category>컴퓨터 비전</category>
      <category>style transfer 예제</category>
      <category>style transfer 원리</category>
      <category>style transfer 코드</category>
      <category>스타일 전송</category>
      <category>스타일 전송 샘플 코드</category>
      <category>스타일 전이</category>
      <category>스타일 전이 설명</category>
      <category>스타일 전이 실습</category>
      <category>스타일 전이 예제</category>
      <category>스타일 전이 코드</category>
      <author>Baek Kyun Shin</author>
      <guid isPermaLink="true">https://bkshin.tistory.com/310</guid>
      <comments>https://bkshin.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-14-%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%A0%84%EC%9D%B4Style-Transfer#entry310comment</comments>
      <pubDate>Tue, 6 Jun 2023 19:47:51 +0900</pubDate>
    </item>
  </channel>
</rss>