<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Hitbee-dev</title>
        <link>https://velog.io/</link>
        <description>배울수록 반성하는 개발자</description>
        <lastBuildDate>Fri, 14 Jun 2024 15:23:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Hitbee-dev</title>
            <url>https://velog.velcdn.com/images/kc0584-dev/profile/126fd58d-3b5c-4dd2-9066-6264903a9a17/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Hitbee-dev. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kc0584-dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Computer Vision 그리고 Linux #0 - 회고(?)]]></title>
            <link>https://velog.io/@kc0584-dev/Computer-Vision-%EA%B7%B8%EB%A6%AC%EA%B3%A0-Linux-0-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@kc0584-dev/Computer-Vision-%EA%B7%B8%EB%A6%AC%EA%B3%A0-Linux-0-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Fri, 14 Jun 2024 15:23:41 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/247a7bef-ae9e-4519-b91d-612e3bc6c374/image.jpg" alt=""></p>
<h3 id="회고">회고(?)</h3>
<p>대학원 졸업 전에 미리 회사에 입사하게 되었고, 벌써 1년이 조금 더 지났다. (입사 후 1~2달 뒤 졸업했다.)
1년동안 회사에서 진행했던 CV 관련 프로젝트는 3개.
실무 경험이 많았다면 바쁘지 않았을 텐데, 내 능력 부족으로 입사 후 반년은 자책을 많이 했던 것 같다.</p>
<p>지금은 프로젝트를 2개만 하고 있는 상황이라, 조금 여유가 있을 때 지금까지 공부하고 경험했던 모든 것들을 블로그에 써보려고 한다.
다른 분야(FrontEnd, BackEnd, Client 등)에서 도움이 될지는 모르겠으나,
내가 있는 Computer Vision 분야에서 신입분들이나 현직자분들에게 여러 Model들을 빠르게 사용 및 테스트를 해야하는 경우 도움이 됐으면 한다.</p>
<p>그리고 서버에서 많이 작업 해야하는 특성이 있어서 대부분의 환경은 Linux, docker에서 진행될 것이다.
Windows환경에서 진행해도 사실 큰 문제는 없으나, 예외로 Darknet(YOLOv4)의 경우 Windows에서 Build하려면 Dependences가 한 두개가 아니라 ㅎㅎ..</p>
<p>근데 요즘 객체인식 모델들이 정말 빠르게 업데이트가 되고 있어서, 구 모델들을 블로그에 공유하는게 의미가 있을까 싶기도 하다.. (이미 너무 많은 분들이 자세히 분석해서)
그래서 나는 블로그에 글을 쓸 때, 아래와 같은 제한을 두려고 한다.</p>
<hr>
<h3 id="0-모델의-특징-설명"><strong>0. 모델의 특징 설명</strong></h3>
<p>그래도 이 모델을 왜 쓰는지, 어떤 장점이 있는지, 단점이 있다면 뭐가 있는지는 알고 써야하지 않겠는가..
너무 길게 설명하면 루즈하니, 핵심적인 부분만 요약해서 간단하게 특징을 설명할 것이다.</p>
<h3 id="1-환경-세팅-방법"><strong>1. 환경 세팅 방법</strong></h3>
<p>Framework마다 필요한 환경이 달라서, <em>ex) <code>CUDA Version</code> or <code>Python Package</code></em>등..
내 Local환경에 매번 다 설치를 하게되면 나중에 돌이킬 수 없는 큰 문제가 생긴다.
그래서, <code>Conda</code> 또는 <code>Docker</code>로 환경을 분리하여 테스트할 수 있도록 작성할 것이다.</p>
<h3 id="2-학습-데이터-셋-형식"><strong>2. 학습 데이터 셋 형식</strong></h3>
<p>대부분 이미 만들어진 모델(Pretrained Model)만을 가지고 인식 테스트만 진행해보고 싶은게 아닐거다.
자신만의 데이터(Custom Datasets)를 가지고 학습도 해보고 싶을텐데, 모델마다 학습에 지원되는 데이터셋 포맷이 다르다. (<code>COCO</code>, <code>YOLO</code>, <code>VOC</code>..)
물론 Framework안에 있는 DataLoader를 뜯어고쳐서 내가 원하는대로 바꾸는 것도 방법인데,
그냥 내가 가지고있는 데이터를 Framework에 지원되는 Dataset Format으로 바꿔주는게 더 빠르다. 그래서 이 또한 가능하도록 작성할 것이다.</p>
<h3 id="3-학습training-방법"><strong>3. 학습(Training) 방법</strong></h3>
<ul>
<li>어떻게 학습을 할 수 있는지? (최대한 간단한 방법)</li>
<li>학습이 실제로 돌아가는 부분이 어디인지? (Code Level)</li>
</ul>
<p>첫 번째 <code>어떻게 학습을 할 수 있는지?</code>의 경우는, 모델 분석이고 뭐고 필요없고,
당장 HyperParameter만 변경해서 학습 돌리고 테스트 해야하는 사람들이 있을 거라서 작성 하는 부분이다.</p>
<p>두 번째 <code>학습이 실제로 돌아가는 부분이 어디인지?</code>의 경우는, Framework 내부를 까서, 자신이 원하는대로 사용할 수 있도록 작성할 것이다.
예시로, API를 받아서 학습을 돌릴 수 있는 프로그램을 개발해야 한다던지?</p>
<h3 id="4-추론classification-detection-segmentation-방법"><strong>4. 추론(Classification, Detection, Segmentation) 방법</strong></h3>
<ul>
<li>어떻게 추론을 할 수 있는지? (최대한 간단한 방법)</li>
<li>인식이 실제로 돌아가는 부분이 어디인지? (Code Level)</li>
</ul>
<p>학습과 마찬가지로, 빠르게 내가 가지고 있는 데이터를 추론 해봐야 하는 사람과,
내가 원하는대로 쓰고싶은 사람 두 분류로 나누어서 작성할 것이다.
되도록이면 Classification, Detection, Segmentation 모든 종류를 다루려고 한다.</p>
<h3 id="5-tip"><strong>5. TIP</strong></h3>
<p>이 부분은 없을 수도 있지만, 아마 대부분의 글에 들어갈 것 같다.
Computer Vision에 관련된 내용들은 아니고, 알아두면 좋은 Linux 명령어나, docker Option들?
아니면 간단하게 쓰기 편한 Algorithm이나, Package들?</p>
<blockquote>
<p><strong>이 시리즈에서 다룰 모델들은 아래와 같다.</strong>
<strong><em>CNN 계열(YOLO)</em></strong>: <code>YOLOv8</code>, <code>YOLOv9</code>, <code>YOLOv10</code>,
<strong><em>Transformer 계열</em></strong>: <code>ViT</code>, <code>Co-DETR</code>, <code>RT-DETR</code>, <code>DINOv2</code></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Docker] Docker Image Layer 수정해서 용량 줄이기 [Fail]]]></title>
            <link>https://velog.io/@kc0584-dev/Docker-Docker-Image-Layer-%EC%88%98%EC%A0%95%ED%95%B4%EC%84%9C-%EC%9A%A9%EB%9F%89-%EC%A4%84%EC%9D%B4%EA%B8%B0-Fail</link>
            <guid>https://velog.io/@kc0584-dev/Docker-Docker-Image-Layer-%EC%88%98%EC%A0%95%ED%95%B4%EC%84%9C-%EC%9A%A9%EB%9F%89-%EC%A4%84%EC%9D%B4%EA%B8%B0-Fail</guid>
            <pubDate>Sun, 06 Aug 2023 14:28:04 GMT</pubDate>
            <description><![CDATA[<p>** 아래 내용은 실패한 결과물 입니다. 같은 문제 해결을 위해 들어왔다면 돌아가셔야합니다.. **</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/baa69249-b021-4fc3-897d-885eab635581/image.png" alt=""></p>
<p>앞으로 인공지능을 개발할 기본 환경을 위해 Docker Image를 세팅하고 있었는데, 여러 시행착오 끝에 드디어 환경설정이 완료됐다.</p>
<pre><code>1. OS SETUP
2. CUDA BUILD
3. CUDNN BUILD
4. OPENCV BUILD</code></pre><p>그리고 이 컨테이너를 시작으로, 앞으로 모든 프로젝트의 기본 환경같은 느낌으로 사용하려했는데..... Docker Image 용량이 <code>35.3GB</code>?</p>
<p>뭔가 이상하다 싶어 Docker Image의 Layer를 확인해보니...</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/fd713990-3d41-498e-b0ec-ef9800065e25/image.png" alt=""></p>
<p>중복되는 내용을 가진 Layer도 많은데, 특히 bash관련된 Layer는 엄청난 용량을 먹고있었다.</p>
<p>여기서 가장 먼저 수정이 필요하다고 느낀 부분들은 아래와 같다.</p>
<pre><code>1. /bin/bash
2. RUN |1 TARGET ....</code></pre><p>얘네 두개만 중복 제거해도 용량이 굉장히 많이 줄어들 것 같았다.
그래서 Layer를 수정해보려 했으나.... docker는 <code>COW(Copy-On-Write)</code>기능을 사용하기 때문에 수정은 불가능하고 Layer를 추가만 할 수 있다.
그럼 정녕 처음부터 다시 깡으로 빌드하고 환경세팅을 해야할까?</p>
<p>그래서 방법을 찾아보았다.</p>
<h1 id="docker-image-save">docker image save</h1>
<p>먼저 docker image를 tar로 저장해주자.</p>
<pre><code class="language-bash">docker save -o {image_name}.tar {image_name}:{image_tag}</code></pre>
<p>tar로 저장된 파일을 압축을 풀어주자.</p>
<pre><code class="language-bash">tar -xvf {image_name}.tar</code></pre>
<p>압축 푼 디렉토리들의 용량을 확인해보자.</p>
<pre><code class="language-bash">du -h
</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/08640c50-79e4-4ee0-b665-b02cc1882d80/image.png" alt=""></p>
<p>찾았다. 아까 중복되었던 <code>/bin/bash</code>중, 19G와, <code>RUN |1 TARGET ....</code>중 2.0G 파일 두개를 지우자.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/f82c77c6-f2f0-49ae-8c8c-58dc37bdf4da/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/897a714f-fa26-4af7-b3ef-fb0ff70563e8/image.png" alt=""></p>
<p>이 두개를 지우고, 압축 풀며 나온 json파일에도 Layer를 지워주자.
근데, sha256으로 암호화가 되어있다. SHA-256은 단방향 암호화이기 때문에 복호화가 불가능하다.
그럼 여기서 포기해야할까?
나는 아까 디렉토리 용량을 조회했을 때 순서가 의미있다고 생각했다.(뇌피셜)
따라서, 인덱스를 따라 지워봤다. <code>4번째 인덱스</code>, <code>10번째 인덱스</code>.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/c51d741b-d4ea-4508-a0a3-ef6ed0f2b7e6/image.png" alt=""></p>
<p>그리고, 맨처음 나와있던 Layer에 해당하는 명령들도 지워줬다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/2ca47c45-9120-426d-a2eb-7f8c26e3c03e/image.png" alt=""></p>
<p>또.. manifest.json에서도 지운 Layer를 제거해줬다.
여기는 파일 명으로 되어있어서 찾기 쉬웠다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/eed09bc8-e6a5-4617-8084-5d0969f48cf0/image.png" alt=""></p>
<p>그리고 이 디렉토리를 다시 tar로 압축해서 docker image를 올리면 될 것 같다고 생각했다.</p>
<pre><code class="language-bash">tar -cvf {image_name}.tar {image_name}</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/70d494b8-487d-4776-a156-73a269d8d701/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/f9963ca8-0317-4109-8707-c28867e4e5c2/image.png" alt=""></p>
<p>실패했다. 무슨 파일이나 디렉토리를 찾기 못했다고 한다.</p>
<p><strong>Docker Image를 새로 만드는게 더 빠를 거 같다.</strong>
__삽질하지 말자.. __</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[EasyOCR 101번째 Contributor, 그리고 10위가 되다..]]></title>
            <link>https://velog.io/@kc0584-dev/EasyOCR-101%EB%B2%88%EC%A7%B8-Contributor-%EA%B7%B8%EB%A6%AC%EA%B3%A0-10%EC%9C%84%EA%B0%80-%EB%90%98%EB%8B%A4</link>
            <guid>https://velog.io/@kc0584-dev/EasyOCR-101%EB%B2%88%EC%A7%B8-Contributor-%EA%B7%B8%EB%A6%AC%EA%B3%A0-10%EC%9C%84%EA%B0%80-%EB%90%98%EB%8B%A4</guid>
            <pubDate>Fri, 19 May 2023 14:07:22 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><a href="https://github.com/JaidedAI/EasyOCR/pull/920"><strong>EasyOCR PullRequest Log</strong></a></p>
</blockquote>
<p>나는 석사학위논문을 작성할 때 사용했던 OCR Framework로 EasyOCR을 사용했다.</p>
<p>학위논문을 받기 위해 여러가지를 실험하던 중, Framework 자체를 분석하며 사용자의 입장에서 약간 개선됐으면 하는 부분이 있어 PR을 보내놓고 3개월이 지나,</p>
<p>Computer Vision직무로 취업을 하고 회사에 적응하고 있었는데 퇴근시간 10분전에 무슨 메일이 오길래 뭔가하고 봤다가 너무 기뻐서 여기저기 자랑좀 했다.</p>
<p><strong>내가 개발자로써 목표하던 여러가지중 하나</strong>, 10k 이상의 오픈소스에 Contributor가 되어보는것.
&quot;개발자로써&quot; 목표이기 때문에 문서 수정이나, 오타 수정이 아닌 내 코드가 오픈소스에 적용되는 것이 목표였다.</p>
<p>그걸 너무 빠른시간에 이뤘다고 생각해서 행복하다 ㅎ...</p>
<h1 id="기여-내용">기여 내용</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/9ac659e2-042b-4c66-98fd-1899be8e555f/image.png" alt=""></p>
<p>EasyOCR Framework를 사용해서 Detection을 하게되면,
간혹가다 검출된 위치 Vector값(x, y, w, h)이 소수점으로 들어오게 되며 이 결과값들은 마지막에 그냥 더해져서 출력되는 문제가 있었다.</p>
<p>별 것 아닌것 같지만, 이게 왜 문제가 있었냐면 OCR의 경우 인식된 좌표 순으로 뭐가 뭐로 인식됐는지 알아볼 수 있어야 하는데, 이렇게 위치 Vector값이 소수점으로 들어오게 되면 직접 디버깅 해보지 않는 이상 찾기가 어렵다.</p>
<p>그래서 이걸 개선하고자 기존의 코드는 해하지 않고, parameter를 따로 추가하는 방식(option)으로 PullRequest를 보냈고, 3개월이라는 시간이 지난 끝에 JaidedAI 팀에게 따봉 하나와 Merge를 선물받았다.</p>
<p><strong>PR보낸 내용이 궁금하다면 맨 위에 있는 링크로 가보시면 됩니다!</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/897c676e-fad0-4afc-960e-77a035c062fd/image.png" alt=""></p>
<p>그래서 나는, EasyOCR Framework의 101번째 Contributor가 되었고...</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/59821cfa-ee29-4e2c-a33e-f88013d46a25/image.png" alt=""></p>
<p>왜인지는 모르겠는데 10위에 들었다. <del>(저걸 10위라고 표현하는게 맞나 모르겠네요)</del></p>
<p>어쨌든... 한가지 버킷리스트는 달성했고, 내가 개발자로써 자부심이 더 생기는 하루가 되어 오랜만에 글을 남겨본다.</p>
<h3 id="ps">ps.</h3>
<p>그동안 취업 준비한다고 git 잔디관리도 못하고 블로그도 완전히 활동을 하지 못했네요..
그래도 많은 질문 메일 주신분들 감사드립니다~!
앞으로는 <strong>현업에서 자주 사용되는 유용한 기술</strong>들에 대해 자주 업로드 할 예정입니다 : )</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[NVIDIA Jetson YOLOv5 Object-Detection Tutorial]]></title>
            <link>https://velog.io/@kc0584-dev/NVIDIA-Jetson-YOLOv5-Object-Detection-Tutorial</link>
            <guid>https://velog.io/@kc0584-dev/NVIDIA-Jetson-YOLOv5-Object-Detection-Tutorial</guid>
            <pubDate>Wed, 11 Jan 2023 18:07:13 GMT</pubDate>
            <description><![CDATA[<p>연구과제를 진행하면서 Jetson Xavier NX를 사용하고있다.
Jetson Nano랑 Xavier NX 둘 다 사용해서 개발해보니, Xavier는 정말... 하 ^^ NVIDIA 공식 홈페이지에서도 아직 해결하지 못한 버그들이 좀 있다고..!</p>
<h1 id="1-카메라-연동-확인">1. 카메라 연동 확인</h1>
<p>결과적으로 나는 <code>USB 카메라</code>를 사용했다.</p>
<p>연구과제 비용으로 <code>CSI 카메라</code>도 구매를 했는데 도대체가 인식을 못해서 <strong>왜 인식이 안되는지</strong> 몇시간 삽질하다 NVIDIA 측에서 2020년에 관련된 버그를 확인했다는 글을 확인했고, 해결되면 답을 주겠다고 했는데 추가적인 글이 달리진 않았다.</p>
<p>유튜브나 몇몇 블로그들 보면 Xavier NX로 CSI 카메라를 잘 사용하는 것 같은데,
일반적인 CSI 카메라가 아니라, 무슨 보드에 카메라 8개씩 달려있는 것들로 테스트하는 영상만 있다.</p>
<p>다른 블로그들에도 하드웨어 사진이 없다보니 내가 사용하는 카메라랑 일치하는지도 모르겠고..
내가 테스트로 사용해본 CSI 카메라는 <a href="https://uk.pi-supply.com/products/raspberry-pi-camera-board-v2-1-8mp-1080p">IMX219</a>와<a href="https://uk.pi-supply.com/products/raspberry-pi-camera-board-v2-1-8mp-1080p">Raspberry Pi Camera V2.1</a>이다.</p>
<p>Jetson Nano에선 정상인식 하는거 확인했는데, Xavier NX에서만 이런다..
둘 다 인식조차 못하고, 여기다 더 이상 시간쓰는거 너무 아까워서 그냥 <strong>USB 카메라</strong> 썼다.</p>
<h1 id="2-아나콘다-python-환경설정">2. 아나콘다 Python 환경설정</h1>
<p>ㅎ.. 뭐든 하기전에 필요한 프로젝트에 필요한 파이썬 버전부터 확인하고 시작하자..
이전에도 높은 버전으로 세팅 다 해뒀다가 더 낮은 버전의 파이썬 버전으로 진행했다가 싹 다 밀고 다시 세팅하느라 시간을 두배로 버렸는데, 두번째 실수를 경험했으니 더 이상 또 반복하면 <strong>나는 침팬치다 ^^;</strong> <del>우끼우끼</del></p>
<p>결론적으로는 이 블로그를 보고 따라할거라면 Python 3.8 버전을 설치하자.</p>
<p>→ 왜냐햐면, cpu말고 gpu로 테스트할 예정이기 때문, cpu는 너무 느리다..</p>
<p>아나콘다로 환경설정 하는건 <a href="https://velog.io/@kc0584-dev/Ubuntu-18.04-Anaconda-%EC%84%A4%EC%B9%98">이전에 작성해 둔 글</a> 보고 진행!</p>
<h1 id="3-yolov5-모델을-사용해서-object-detection-테스트">3. YOLOv5 모델을 사용해서 Object-Detection 테스트</h1>
<p><del>하... 진짜 여기서 환경설정 하다가 Xavier 부숴버릴뻔했다..</del>
연구실 애들하고 머리 싸매면서 10시간은 넘게 걸린듯..</p>
<p>Xavier에선 일반적인 방법으로 Pytorch가 설치되지 않는다.
일반적으로 Pytorch를 설치하면 OpenCV 버전이 맞지 않아서 CUDA 활성화가 안되고,
어떻게든 Pytorch를 설치했더니 torchvision 버전이 맞지 않다고..
<strong>+ 이건 Xavier만의 문제가 아니라 리눅스 계열에서 간간히 발생하는 문제인 것 같다.</strong></p>
<h2 id="1-문제-해결-방법">1) 문제 해결 방법</h2>
<p>NVIDIA에서 Jetson과 Pytorch를 사용하려면 <a href="https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048">파이토치 핍 휠</a> 이라는걸로 설치해야 한다고 한다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/19ee9cc1-8fcb-46e1-b6d6-5e7a4e1eec08/image.png" alt=""></p>
<p>그래서 우리는 3.8에 맞는 링크를 복사하고 wget으로 다운받아 와서 설치해주자.</p>
<pre><code class="language-bash">wget https://developer.download.nvidia.com/compute/redist/jp/v50/pytorch/torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl</code></pre>
<p>그리고 문제의 <code>torchvision</code> 이것도 NVIDIA
에서 해결방안을 알려준다. 
<img src="https://velog.velcdn.com/images/kc0584-dev/post/39cb85a8-966f-4714-a8d9-7bfa5c0423fa/image.png" alt=""></p>
<p>위 방법을 따라하면 되는데, 위에 입력해야하는 명령어들 중 git clone을 할 링크는 <a href="https://github.com/pytorch/vision">여기</a>다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/cd6e678d-6790-419c-896d-9b3309730d83/image.png" alt=""></p>
<p>이 블로그 내용으로는 Pytorch 1.12.0 버전을 받았으니, torchvision은 0.13.0으로 받아야한다.</p>
<pre><code class="language-bash">sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch 0.13.0 https://github.com/pytorch/vision torchvision
cd torchvision
python3 setup.py install</code></pre>
<p>위 코드를 입력하면 설치된다.</p>
<p>참고로 <code>python3 setup.py install</code>에 걸리는 시간은 상상을 초월하니 다른거 하고오는게 낫다. <em>대략 1시간</em> 걸리는듯 한다..</p>
<h2 id="2-yolov5-실행">2) YOLOv5 실행</h2>
<p>가장 먼저 실행할 <a href="https://github.com/ultralytics/yolov5">YOLOv5의 git</a>을 clone해오자.</p>
<pre><code class="language-bash">git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt</code></pre>
<p>위 명령어를 통해 필요한 라이브러리도 한번에 받아주면 실행준비 끝이다.</p>
<p>열심히 <code>torch</code>와 <code>torchvision</code>도 깔았으니! GPU로 이미지 연산처리를 해보자. <em>(당연하겠지만, CUDA 설치도 되어있어야 하는거.. 알죠?)</em></p>
<pre><code class="language-bash">python3 detect.py --weights yolov5s.pt --source 0 --device 0</code></pre>
<p>위 명령어에 들어간 parameter 종류들은 아래와 같다.</p>
<table>
<thead>
<tr>
<th>--weight</th>
<th>Mask AP val</th>
</tr>
</thead>
<tbody><tr>
<td>yolov5n</td>
<td>23.4</td>
</tr>
<tr>
<td>yolov5s</td>
<td>31.7</td>
</tr>
<tr>
<td>yolov5m</td>
<td>37.1</td>
</tr>
<tr>
<td>yolov5l</td>
<td>39.9</td>
</tr>
<tr>
<td>yolov5x</td>
<td>41.4</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th>--source</th>
<th>Parameter</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>webcam</td>
</tr>
<tr>
<td>img.jpg</td>
<td>image</td>
</tr>
<tr>
<td>vid.mp4</td>
<td>video</td>
</tr>
<tr>
<td>screen</td>
<td>screenshot</td>
</tr>
<tr>
<td>path/</td>
<td>directory</td>
</tr>
<tr>
<td>list.txt</td>
<td>list of images</td>
</tr>
<tr>
<td>list.streams</td>
<td>list of streams</td>
</tr>
<tr>
<td>&#39;path/*.jpg&#39;</td>
<td>glob</td>
</tr>
<tr>
<td>&#39;<a href="https://youtu.be/Zgi9g1ksQHc&#39;">https://youtu.be/Zgi9g1ksQHc&#39;</a></td>
<td>YouTube</td>
</tr>
<tr>
<td>&#39;rtsp://example.com/media.mp4&#39;</td>
<td>RTSP, RTMP, HTTP stream</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th>--device</th>
<th>cpu &amp; gpu</th>
</tr>
</thead>
<tbody><tr>
<td>cpu</td>
<td>cpu</td>
</tr>
<tr>
<td>0</td>
<td>gpu</td>
</tr>
<tr>
<td>1</td>
<td>gpu</td>
</tr>
<tr>
<td>2</td>
<td>gpu</td>
</tr>
<tr>
<td>3</td>
<td>gpu</td>
</tr>
</tbody></table>
<p>만약 위 명령어를 입력했는데, <strong>Python</strong> 이라고만 나오고 아무것도 실행되지 않으면 python3가 아닌 python으로 명령을 입력해야한다. (아래 예시)</p>
<pre><code class="language-bash">python detect.py --weights yolov5s.pt --source 0 --device 0</code></pre>
<h2 id="3-실행-결과">3) 실행 결과</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/1aeb8a42-1d5c-4926-81d2-e40e3cb96330/image.gif" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Ubuntu 18.04 Anaconda 설치]]></title>
            <link>https://velog.io/@kc0584-dev/Ubuntu-18.04-Anaconda-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@kc0584-dev/Ubuntu-18.04-Anaconda-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Thu, 29 Dec 2022 07:33:23 GMT</pubDate>
            <description><![CDATA[<p>연구과제를 진행하면서 Jetson Xavier랑 Windows랑 MAC이랑 왔다갔다 하면서 작업해야 하는데,
매번 모니터 연결하는게 귀찮아서 ssh로 연결해서 터미널에서 작업하고있다.</p>
<p>항상 환경설정은 매번 필요하고 작성해두면 언젠가 또 쓸 일이 있을테니 작성해본다.</p>
<h1 id="설치">설치</h1>
<p>Jetson의 경우엔 <code>/tmp</code> 경로에 설치해줘야한다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/2c220681-ffc2-473d-b499-ecb36d761211/image.png" alt=""></p>
<p><a href="https://www.anaconda.com/products/distribution">아나콘다 홈페이지</a>에 들어가서 설치파일을 받아야 하는데, Jetson을 모니터에 연결하고 기본으로 깔려있는 Chromium에 접속해서 하는건 귀찮으니, ssh로 연결한 만큼 좀 더 편리하게 다운받고 설치하자.
<strong>아나콘다 홈페이지에 있는 설치파일을 우클릭해서 링크복사</strong>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/7ae8adaa-2db7-40f2-89a5-96907f296288/image.png" alt=""></p>
<p>터미널에서 <code>wget &lt;복사한 링크&gt;</code> 입력하면 위 사진처럼 편하게 받을 수 있다.
아래는 코드는 예제지만, 버전이 업데이트 되면서 맞는 버전을 써야하니, <strong>다운로드 링크를 복사해서 사용하자.</strong></p>
<pre><code class="language-bash">wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/bfb0663f-d10d-403e-b370-994c45f8dda6/image.png" alt=""></p>
<p>다운로드 받은 파일을 보면 <code>Anaconda3-...Linux-x86_64.sh</code> 파일이 있다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/31b58108-d5d7-4ecc-b0d0-b1adae6a21ed/image.png" alt=""></p>
<p>정상적으로 잘 받아졌는지 확인하기 위해 <code>sha256sum</code> 명령어로 데이터 무결성 체크섬 진행</p>
<pre><code class="language-bash">sha256sum Anaconda3-2022.10-Linux-x86_64.sh</code></pre>
<blockquote>
<p><strong>TIP</strong>
리눅스를 좀 많이 다뤄본 사람들이면 사람들은 알겠지만, 잘 모르는 사람들을 위해서 팁을 남긴다.
Anaconda3-....이걸 다 언제 입력하고 있나. 정말 간단하게 입력하는 방법은
Anaconda의 A만 입력하고 <code>Tab</code>키 누르면 된다.
단, A로 시작하는 다른 파일명이 있으면 여러개가 나오기 때문에 독립적인 파일이름까지는 입력해줘야 한다.
예시로 <code>Anaconda3.sh</code> 파일이 있고, <code>Anasensor.sh</code> 라는 파일이 있다고 했을 때
<code>Anaconda3.sh</code>파일을 빠르게 입력하고 싶다면 <code>Anac</code>까지만 입력하고 <code>Tab</code>키를 누르면 된다.
반대로 <code>Anasensor.sh</code>라는 파일을 빠르게 입력하고 싶다면 <code>Anas</code>까지만 입력하고 <code>Tab</code>키를 누르면 된다.</p>
</blockquote>
<p>Ubuntu는 기본적으로 bash쉘을 쓰기 때문에 설치할 때도 bash 명령어를 입력해줘야 한다.</p>
<pre><code class="language-bash">bash Anaconda3-2022.10-Linux-x86_64.sh</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/48cfca24-5083-4ec5-a934-84cf0e27739d/image.png" alt=""></p>
<h2 id="설치중-1차-에러-발생">설치중 1차 에러 발생</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/1d54ebdc-2006-4d23-b868-fc0f2d3cb0d1/image.png" alt=""></p>
<p><code>ERROR: File or directory already exists: &#39;/home/jetson/anaconda3&#39;</code>
<code>If you want to update an existing installation, use the -u option.</code>
설치 진행하다 위와 같은 에러가 나오면 아래와 같이 해결하자.</p>
<ol>
<li><p>root 경로로 이동해서 <code>anaconda3</code> <strong>삭제</strong></p>
<pre><code class="language-bash">rm -rf anaconda3/</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a1efe3f9-0a84-4289-b744-88eba821166a/image.png" alt=""></p>
</li>
<li><p>다시 tmp 경로로 이동해서 재 설치
<img src="https://velog.velcdn.com/images/kc0584-dev/post/7e9cce23-7934-414a-8bb3-cd02d0ede218/image.png" alt=""></p>
</li>
</ol>
<h2 id="설치중-2차-에러-발생">설치중 2차 에러 발생</h2>
<p><code>cannot execute binary file: Exec format error</code>
에러가 발생했다는건 파일 형식이 맞지 않아서이다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/e2a90eb7-de32-41cf-879d-8dfb302c0503/image.png" alt=""></p>
<p><strong>다운로드부터 다시 받자..</strong></p>
<h1 id="다시-설치">다시 설치</h1>
<p><code>Xavier NX</code>같은경우엔 <code>x86</code>이 아니라, <code>ARM</code>이었다.. 다운로드를 다시 받자..
<img src="https://velog.velcdn.com/images/kc0584-dev/post/f3e930e6-ce7a-4838-9cf8-454ae8fdb6c7/image.png" alt=""></p>
<p>일단 아까 다운받았던 파일을 지워주고, 재 설치했던 파일도 지워주자.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/707aee8a-36e3-4fdd-9cee-7d20b9e8423b/image.png" alt=""></p>
<p>다시 다운로드 링크를 복사해서 터미널에 넣어주자.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/8d959046-292c-44c9-aefb-176c18a3d14e/image.png" alt=""></p>
<pre><code class="language-bash">wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-aarch64.sh</code></pre>
<p><strong>다시 다운로드...</strong>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/da5e92d8-4148-4fa1-a25d-f98e6211d151/image.png" alt=""></p>
<p><strong>재 설치</strong>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/73411545-b244-42df-84d5-93c80c8fad39/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/31aaf4fd-a630-455e-a6e9-b22cffff8bfe/image.png" alt=""></p>
<p>conda 명령어가 듣지 않는다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/e71e4084-60d2-4bd7-9477-071c8895d5a8/image.png" alt="">
아나콘다를 사용하려면 <code>PATH</code> 설정을 해 줘야 한다.</p>
<pre><code class="language-bash">vi ~/.bashrc</code></pre>
<p>위 명령어를 입력해서 텍스트 편집기를 열어주고,
아래 명령어를 입력하여 <code>PATH</code>를 추가해주고 저장하면 된다.</p>
<pre><code class="language-bash">export PATH=~/anaconda3/bin:~/anaconda3/condabin:$PATH</code></pre>
<p>그리고 저장한 내용을 적용하기 위해 아래 명령어를 입력하자.</p>
<pre><code class="language-bash">source ~/.bashrc</code></pre>
<p>잘 적용 됐는지 버전 및 명령어 확인</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/432a3dc1-85bb-44d1-a05b-64ef3b48b747/image.png" alt=""></p>
<h1 id="가상환경-생성-및-실행">가상환경 생성 및 실행</h1>
<p>원하는 파이썬 버전을 설치하기 위해 아래 명령어 입력</p>
<pre><code class="language-bash">conda create -n &lt;가상환경이름&gt; python=&lt;버전&gt;</code></pre>
<p>__예시: __</p>
<pre><code class="language-bash">conda create -n hitbee python=3.7</code></pre>
<p><strong>그럼 뭔가를 열심히 설치한다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/6037814e-faf6-4f86-9f99-44873ba6cf55/image.png" alt=""></p>
<p>잘 생성됐는지 확인하자.</p>
<pre><code class="language-bash">conda env list</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/3603b386-3ade-4d0f-b8c6-4f27f0653083/image.png" alt=""></p>
<p>내가 생성한 가상환경을 활성화 시키기 위해 아래 명령어를 사용</p>
<pre><code class="language-bash">conda activate &lt;가상환경이름&gt;</code></pre>
<p>__예시: __</p>
<pre><code class="language-bash">conda activate hitbee</code></pre>
<p>맨 처음 세팅하면 초기 세팅을 하라는 메세지가 뜰 수도 있다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/f3c84ff7-4c73-4ba2-9af8-c7f0a30370fe/image.png" alt=""></p>
<p>그럼 아래 명령어를 입력해서 자신이 사용하고있는 Shell(<code>bash</code>, <code>zsh</code>등..)을 입력해주자.</p>
<pre><code class="language-bash">conda init bash</code></pre>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/176e1222-f9d0-4aad-a3bb-1c99de7d4862/image.png" alt=""></p>
<p>그리고 설치된 아나콘다 파일도 추가해주기 위해 아래 명령어 입력</p>
<pre><code class="language-bash">source ~/anaconda3/etc/profile.d/conda.sh</code></pre>
<p>이제 가상환경 활성화가 잘 되는 것을 볼 수 있다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/3962207c-9de8-43cb-9dd7-4ef5411fe96e/image.png" alt=""></p>
<blockquote>
<p>항상 느끼지만 환경설정이 제일 오래걸리고, 귀찮은 작업이라 사실 내가 보려고 작성한 글이기도 하다..
누군가에게 도움이 되면 더 좋고!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[코딩테스트를 위한 A* 알고리즘]]></title>
            <link>https://velog.io/@kc0584-dev/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-A-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@kc0584-dev/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-A-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Thu, 15 Dec 2022 21:43:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>게임을 하다보면, 내 캐릭터 위치를 이동시키기 위해 어딘가 위치를 찍게 된다.
<strong>그럼, 내 캐릭터는 어떤 알고리즘으로 그 위치를 정확하게 찾아가는 걸까?</strong></p>
</blockquote>
<h1 id="최단경로-알고리즘의-종류와-시간복잡도"><strong>최단경로 알고리즘의 종류와 시간복잡도</strong></h1>
<p><strong>1. 플로이드 알고리즘 (<em>Dynamic Programming</em>, $$O(N^3)$$)</strong>
<strong>2. 다익스트라 알고리즘 (<em>Greedy Approach</em>, $$O(N^2)$$)</strong>
<strong>3. A* 알고리즘 (<em>Heuristic Alrogithm</em>, $$?$$)</strong></p>
<ul>
<li>*<U>구현 방식에 따라 시간복잡도가 달라짐, <strong>다익스트라의 확장판</strong></U>
출발 지점에서 목적 지점까지 가면서 주변에 새로 검색되는 지점들을 모두 <strong>Priority-Queue(우선순위)</strong>에 넣고, 그 중에서 <strong>Top Priority</strong> 지점을 꺼낸 후, <U>그 지점부터 다시 주위로 검색을 반복</U>함*</li>
</ul>
<p><strong>4. JPS 알고리즘 (Jump Point Search, ?)</strong></p>
<ul>
<li><em>A\</em> 알고리즘과 큰 구조는 같으나, 레이더처럼 <strong>방사</strong> 형태로 검색을 하고, <U>충돌 정보를 기반</U>으로 <strong>분기점이 될 수 있는 지점</strong>들만 <strong>Priority-Queue</strong>에 넣기 때문에 탐색거리가 멀어질수록, <strong>A*보다 빠른 경로 탐색 결과를 도출한다.</strong>*</li>
<li><strong>JPS(B) 알고리즘</strong>의 경우 <U>A*보다 1000배 이상 빠르다</U>는 이야기도 있다..*</li>
</ul>
<p><em><strong>BFS</strong>, <strong>벨만포드</strong> 등도 있지만 그냥 대표적인 것들만 적어두었다.</em></p>
<blockquote>
<p>JPS 알고리즘이 성능이 더 좋은건 맞지만 <U>동서남북 4방향</U>이 아닌 <strong>8방향의 대각 방향</strong>을 보기 때문에 코딩테스트 문제에서는 거의 사용되지 않는다.
<strong>따라서 A*알고리즘에 대해 알아보자</strong> (물론 A*도 8방향을 볼 수는 있다.)</p>
</blockquote>
<h1 id="a-알고리즘">A* 알고리즘</h1>
<ul>
<li><strong>A* 알고리즘</strong>은 내가 <U>출발해야하는 지점</U>과 <U>도착해야하는 지점</U>을 알아야 사용할 수 있다.<ul>
<li><em><strong>dijkstra 알고리즘</strong>은 출발 지점만 알아도 되지만, 모든 경로를 탐색하기 때문에 <U>불필요한 탐색</U>이 발생할 수 있다.</em></li>
</ul>
</li>
</ul>
<ul>
<li><p><strong>A* 알고리즘</strong>은 다음 탐색 노드를 선정하는 방식이 다른 최단거리 탐색 알고리즘들과는 약간 다르다.</p>
<ul>
<li>$$F(n) = G(n) + H(n)$$의 식을 따르는데, 각 역할은 아래와 같다.<ul>
<li>$$F$$ = 해당 노드 $$n$$에 대한 가중치들의 합</li>
<li>$$G$$ = 새로운 노드까지의 거리</li>
<li>$$H$$ = 현재지점으로부터 도착지점까지의 예상 가중치</li>
</ul>
</li>
<li>여기서 제일 중요한 건 $$H$$다.<ul>
<li>$$H = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2}$$로 구할 수 있다.
$$(x_1, y_1)$$ = 시작지점 좌표
$$(x_2, y_2)$$ = 도착지점 좌표
이 식은 그냥 <U>점과 점 사이 거리</U>를 알기 위한 공식이다.</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Open-List</strong>와 <strong>Closed-List</strong></p>
<ul>
<li><strong>Open-List</strong>: <U>탐색 가능성</U>이 있는 노드들의 집합</li>
<li><strong>Closed-List</strong>: <U>탐색이 완료</U>된 노드들의 집합</li>
</ul>
</li>
</ul>
<ul>
<li>동서남북 중 한 칸을 이동할 때의 비용: 10</li>
<li>대각으로 한 칸을 이동할 때의 비용: 14
로 두는게 좋다. 왜냐면 피타고라스 정리에 따라 삼각형의 변을 구하는 공식을 따라가기 때문.
$$
\begin{aligned}
a^2 + b^2 &amp;= c^2\
10^2 + 10^2 &amp;= 14^2
\end{aligned}
$$
근데 $$10^2 + 10^2 = 200$$이고, $$14^2 = 196$$인데 이게 어떻게 같냐?
라고 할 수 있는데, <U>정확히는 틀린 값</U>이지만, 최단경로를 찾기 위해서는 <U>실수형</U>이 아닌 <strong>정수형</strong>이어야 처리속도가 훨씬 빨라 비슷한 값으로 쓰는 것이다.<h2 id="a-알고리즘의-처리-순서">A* 알고리즘의 처리 순서</h2>
</li>
</ul>
<ol>
<li>출발 노드를 Open-List(Queue)에 삽입</li>
<li>Open-List에서 pop()하여 비용 평가</li>
<li>Closed-List에 삽입</li>
</ol>
<p>위 3개를 종료노드까지 반복하면 된다.</p>
<hr>
<h1 id="코딩테스트-문제로-알아보기">코딩테스트 문제로 알아보기</h1>
<h2 id="삼성-2022년도-하반기-오후-1번문제">삼성 2022년도 하반기 오후 1번문제</h2>
<p><a href="https://www.codetree.ai/training-field/frequent-problems/codetree-mon-bread/description?page=3&amp;pageSize=20">CODETREE - 코드트리빵 골드2</a></p>
<blockquote>
<p><strong>각 줄에 주석을 달아두었으니 이해해보자.</strong></p>
</blockquote>
<pre><code class="language-python">import sys, math

input = sys.stdin.readline

# 격자 크기, 빵 사러 갈 사람의 수
N, M = map(int, input().split())
# 격자 받아오기
area = [list(map(int, input().split())) for _ in range(N)]
# 편의점 위치 받아오기
store = [list(map(int, input().split())) for _ in range(M)]

# A* 알고리즘에 필요한 변수
F, G, H = 0, 0, 0

# A* 알고리즘을 진행하며 지나가지 못하는 부분을 만들어 줄 벽
wall = []

# 빵사러 갈 사람들의 최단거리 수
path_length = [0]*M

# basecamp 좌표 저장을 위한 리스트
basecamp = []

# basecamp 좌표 저장
for i in range(N):
    for j in range(N):
        if area[i][j] == 1:
            basecamp.append([i, j])

# store 위치 재 조정(-1씩 해줘야 한다.)
for idx in range(len(store)):
    sx, sy = store[idx]
    store[idx] = [sx-1, sy-1]

# 점과 점 사이를 알기 위한 식 사용(F, G, H중 H에 해당)
def heuristic(x1, y1, x2, y2):
    return int(math.sqrt(((x2-x1)**2) + ((y2-y1)**2))*10)

# A* 알고리즘 실행
def astar(f, g, h, x1, y1, x2, y2):
    # 남 동 서 북
    dx = [1, 0, 0, -1]
    dy = [0, 1, -1, 0]

    buffer = []
    # 한 칸 이동할 때마다 10씩 줌
    g += 10
    # 남 동 서 북 순으로 4번 반복해서 각 위치에 대한 가중치 구하기
    for x, y in zip(dx, dy):
        nx1, ny1 = (x1+x), (y1+y)
        # 만약 이동하려는 곳이 닫힌 리스트(체크한 리스트)에 있는 곳이라면 넘어감
        if (nx1, ny1) in closed_list:
            continue
        # H 가중치 구하기
        h = heuristic(nx1, ny1, x2, y2)
        # 가중치 합산
        f = g + h
        # 합산된 가중치 buffer에 잠시 저장 (4점 비교를 위해)
        buffer.append([f, (nx1, ny1)])
    # 가장 작은 값을 new x, new y변수에 저장
    nx, ny = min(buffer)[1]
    # 가장 작은 값을 open_list에 저장
    open_list.append((nx, ny))
    return nx, ny

# 가고싶은 편의점에서 가장 가까운 베이스캠프 탐색 (반대로 탐색함)
## astar 알고리즘을 사용하려면 정확한 출발지점과 도착지점이 있어야 함
### 출발 지점은 편의점
for user, (sx, sy) in enumerate(store):
    # 벽을 생성하기 위한 임시 변수
    wall_buffer = []
    # 도착 지점은 베이스캠프
    for bx, by in basecamp:
        # 만약 출발지가 벽이라면(이미 지나갔었다면) 넘어감
        # 또는 도착지가 벽이라면(이미 지나갔었다면) 넘어감
        if (sx, sy) in wall or (bx, by) in wall:
            continue
        # 이동 가능한 좌표 저장을 위한 변수
        open_list = []
        # 이동이 완료된 좌표 저장을 위한 변수
        closed_list = []
        # 출발지점은 계속 변경 될 예정이기 때문에 새로 변수 선언
        nsx, nsy = sx, sy
        # 출발지점을 open_list에 넣고
        open_list.append((nsx, nsy))
        # 바로 빼서 closed_list에 넣음
        closed_list.append(open_list.pop())

        # astar 알고리즘 반복 실행
        while True:
            # 출발지점을 제일 가중치가 낮은(가까운) 곳으로 변경
            nsx, nsy = astar(F, G, H, nsx, nsy, bx, by)
            # 이동했던 좌표를 closed_list에 넘김
            closed_list.append(open_list.pop())
            # 만약 이동하려는 좌표가 도착지라면(목적지에 도착했다면) 반복문 종료
            if (nsx, nsy) == (bx, by):
                break
        # 이동했던 경로를 벽을 생성하기 위한 임시 변수에 저장
        wall_buffer.append(closed_list)        

    # 최종적으로 어떤 경로를 선택할 건지 저장하기 위한 변수
    check_path = []
    # 여러 경로들 중, 최적의 경로 1개만 선택하기 위한 반복문
    for wb in wall_buffer:
        # 만약 경로가 비어있다면(처음이라면)
        if check_path == []:
            check_path = wb
        else: # 경로가 비어있지 않다면
            if len(check_path) == len(wb): # 최단거리 같을 때
                if check_path[-1][0] == wb[-1][0]: # 행이 같을 때
                    if check_path[-1][1] &gt; wb[-1][1]: # 비교하려는 열 값이 더 작다면
                        check_path = wb # 바꾸기
                else: # 행이 다를 때
                    if check_path[-1][0] &gt; wb[-1][0]: # 비교하려는 행 값이 더 작다면
                        check_path = wb # 바꾸기
            elif len(check_path) &gt; len(wb): # 비교하려는 최단거리가 더 작을 때
                check_path = wb # 바꾸기

    wall.append(check_path[0]) # 편의점(출발지점) 벽으로 세움
    wall.append(check_path[-1]) # 베이스캠프(도착지점) 벽으로 세움
    path_length[user] = len(check_path) # user 순서대로 몇칸 움직여야하는지 값 넘겨주기

# 시뮬레이션 (최단거리를 유저 순으로 진행했을 때)
count, time = 1, 1
while sum(path_length) != len(path_length):
    for i in range(count):
        if path_length[i] &gt; 1:
            path_length[i] -= 1
    if count &lt; M:
        count += 1
    time += 1

# 최종 걸린 시간 출력
print(time)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[PRML(Pattern Recognition & Machine Learning) 핵심 정리]]></title>
            <link>https://velog.io/@kc0584-dev/PRMLPattern-Recognition-Machine-Learning-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@kc0584-dev/PRMLPattern-Recognition-Machine-Learning-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 13 Dec 2022 18:53:32 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.microsoft.com/en-us/research/uploads/prod/2006/01/Bishop-Pattern-Recognition-and-Machine-Learning-2006.pdf">교재: Pattern Recognition &amp; Machien Learning, Bishop</a></p>
<p><strong>우측 블록링크 가독성은 박살을 내놨다 ㅎㅎ.. <del>죄송합니다</del></strong></p>
<blockquote>
<p>대학원 수업인 <strong>패턴인식론</strong> 수업의 마지막 과제를 진행하며
나중에 나한테도 도움이 될 것 같아 정리해본다.
<em>(기재된 내용은 무조건 정답이 아니라, 공부한 내용을 적어뒀기 때문에 틀릴 수도 있습니다.)</em>
<strong>잘못된 정보가 있다면 댓글 부탁드립니다.</strong></p>
</blockquote>
<h1 id="1-explain-the-meaningconcept-of-the-following-terms">1. <strong>Explain the meaning/concept of the following terms</strong></h1>
<h2 id="1-pattern-recognition-패턴인식">1) Pattern Recognition (패턴인식)</h2>
<p><strong>패턴인식은 컴퓨터를 이용하여 데이터에 내재하는 패턴을 자동으로 추출하는 것을 의미</strong></p>
<ul>
<li>우리가 관찰한 데이터는 출현 가능한 데이터의 일부일 뿐이다.</li>
<li>우리에게 주어진 일부 데이터로부터 전체 데이터를 아우르는 패턴을 발견해야 한다.</li>
</ul>
<pre><code>따라서 이러한 패턴은 아직 발현되지 않은 데이터에 대해서도 잘 설명할 수 있어야 한다.
이것이 패턴인식의 목표이다.</code></pre><h2 id="2-machine-learning-머신러닝">2) Machine Learning (머신러닝)</h2>
<p><strong>인공지능을 구현하는 대표적인 방법 중 하나</strong></p>
<p>컴퓨터를 인간처럼 학습시킴으로써 컴퓨터가 새로운 규칙을 생성할 수 있지 않을까 하는 시도에서 시작되어 컴퓨터가 스스로 학습할 수 있도록 도와주는 <strong>알고리즘</strong>이나 <strong>기술을 개발하는 분야</strong>이다.</p>
<p>일반적으로 알고리즘을 이용하여 데이터를 분석하고, 분석 결과를 스스로 학습한 후, 이를 기반으로 어떠한 판단이나 예측을 하는 것을 의미한다.</p>
<p>따라서 양질의 데이터가 매우 중요한 역할을 한다.</p>
<h2 id="3-supervised-learning-지도학습">3) Supervised Learning (지도학습)</h2>
<p><strong>입력 값과 함께 결과 값(정답 레이블)을 같이 주고 학습을 시키는 방법</strong></p>
<ul>
<li><p>분류(Classification)</p>
<p>  데이터가 <strong>범주형 변수</strong>를 예측하기 위해 사용될 때
  이미지에 강아지나 고양이와 같은 레이블을 할당하는 경우에 해당</p>
<ul>
<li>이진 분류(레이블 2개)와 다중 클래스 분류(레이블 여러 개)인 경우로 나뉜다.</li>
</ul>
</li>
<li><p>회귀(Regression)</p>
<p>  <strong>연속된 값을 예측</strong>할 때(시계열 데이터)
  팔당댐 당류에 따른 서울시내 한강 주요다리 수위 예측</p>
</li>
</ul>
<h2 id="4-unsupervised-learning-비지도학습">4) Unsupervised Learning (비지도학습)</h2>
<p><strong>정답을 알려주지 않고 예측하는 방법</strong></p>
<p>정답을 모르더라도 유사한 것들과 서로 다른 것들을 구분해서 군집을 만들 수 있는 학습 방법</p>
<ul>
<li>클러스터링(Clustering)<ul>
<li>특정 기준에 따라 유사한 데이터 사례들을 하나의 세트로 그룹화 함</li>
</ul>
</li>
<li>차원 축소(Dimension Reduction)<ul>
<li>고려중인 변수의 개수를 줄이는 방법
아주 높은 차원의 특징을 가지는 원시 데이터(raw data)들 중 일부 특징들은 아무 관련이 없기 때문에 차원 수를 줄여서 관계를 도출함에 도움을 준다.</li>
</ul>
</li>
</ul>
<h2 id="5-reinforcement-learning-강화학습">5) Reinforcement learning (강화학습)</h2>
<p><strong>보상 및 벌칙과 함께 여러 번의 시행착오를 거쳐 스스로 학습하는 방법</strong></p>
<ul>
<li>주어진 상황에서 보상(reward)을 최대로 만드는 액션을 찾는 문제</li>
<li>Supervised Learning과 다르게 타겟 값이 주어지지 않는다.<ul>
<li>따라서, 많은 학습 시간이 필요하다.</li>
</ul>
</li>
<li><code>Exploration</code>과 <code>Exploitation</code>의 <strong>trade-off</strong> 문제</li>
</ul>
<h2 id="6-over-fitting-and-under-fitting-과대적합-과소적합">6) Over-Fitting and Under-Fitting (과대적합, 과소적합)</h2>
<ul>
<li><strong>Under-Fitting</strong><ul>
<li>쉽게 말해 <strong>충분히 학습되지 않음</strong> 또는 <strong>모델이 너무 단순함</strong>을 의미함<ul>
<li>이는 정확도가 낮다고도 할 수 있다.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Over-Fitting</strong><ul>
<li>그렇다고 <strong>너무 많이 학습 시키면</strong> 학습시킨 데이터 셋에 대해서는 높은 정확도를 보이지만, 새로운 테스트 데이터가 들어오면 정확도가 낮게 나오는 문제가 발생함</li>
<li>또는 데이터의 특성에 비해 모델이 너무 복잡한 경우도 Over-Fitting이 발생할 수 있다.<ul>
<li>MLP에서 Model에 들어가는 Parameter(Model Capacity)를 증가시키려면 Model 층(layer)를 더 많이 쌓거나, layer당 hidden unit 개수를 늘려야 하는데, 너무 많이(무한정)늘리게 되면 <strong>Over-Fitting</strong>이 발생한다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="7-regularization-term-정칙화">7) Regularization term (정칙화)</h2>
<p><strong>학습할 때 모델에게 제약을 거는 방법</strong></p>
<p>$$
Cost = \underset{i=0}{\overset{N}{\sum{}}}(y_i - \underset{j=0}{\overset{M}{\sum{}}}x_{ij}W_j)^2+\lambda\underset{j=0}{\overset{M}{\sum{}}}W_j^2
$$</p>
<p>위 식에서 Loss function은 $\underset{i=0}{\overset{N}{\sum{}}}(y_i - \underset{j=0}{\overset{M}{\sum{}}}x_{ij}W_j)^2$이며, </p>
<p>Regularization은 $\lambda\underset{j=0}{\overset{M}{\sum{}}}W_j^2$이다.</p>
<p>우리가 줄이고자 하는 것은 Loss function의 값이지만, 그렇다고 Cost가 줄어든다고 무조건 좋은 것이 아니다.(Over-Fitting의 문제)</p>
<p>그래서 이를 해결하고자 있는 것이 <strong>Regularization term</strong>이다.</p>
<p>만약 Cost를 줄일 때 특정 Parameter를 엄청 크게 만듦으로 인해 에러가 줄어드는 것이면 <strong>해당 작업을 하지 않도록 막아주는 역할.
→</strong> 특정 값이 너무 커져 버린다는 뜻은 Over-Fitting이 일어나고 있다는 의미이다.</p>
<h2 id="8-entropy-엔트로피">8) Entropy (엔트로피)</h2>
<p><strong>불확실성의 척도</strong></p>
<p>$$
H(x) = -\overset{n}{\underset{n=1}{\sum}}P(x_i)logP(x_i)
$$</p>
<ul>
<li>entropy가 높다는 것은 정보가 많고 확률이 낮다는 것을 의미</li>
</ul>
<h3 id="예시">예시</h3>
<p>동전을 던졌을 때 나올 수 있는 경우의 수: $\frac{1}{2}$ </p>
<p>주사위를 던졌을 때 나올 수 있는 경우의 수: $\frac{1}{6}$ </p>
<p><strong>동전을 던지는 상황에 대한 entropy:</strong></p>
<p>$$
H_{coin}(x) = -(\frac{1}{2}log\frac{1}{2}+\frac{1}{2}log\frac{1}{2}) = 0.3010
$$</p>
<p><strong>주사위를 던지는 상황에 대한 entropy:</strong></p>
<p>$$
H_{dice}(x) = -(\frac{1}{6}log\frac{1}{6}+\frac{1}{6}log\frac{1}{6}+\frac{1}{6}log\frac{1}{6}+\frac{1}{6}log\frac{1}{6}+\frac{1}{6}log\frac{1}{6}+\frac{1}{6}log\frac{1}{6}) = 0.7782
$$</p>
<p><strong>동전의 entropy: <code>0.3010</code>, 주사위의 entropy: <code>0.7782</code></strong></p>
<p>주사위의 불확실성이 더 크다는 것을 알 수 있다.</p>
<p><strong>이게 위에서 말한 정보가 많고 확률이 낮다는 것을 의미한다는 것</strong></p>
<h2 id="9-frequentist-view-vs-bayesian-view-빈도주의-베이지안">9) Frequentist view vs Bayesian view (빈도주의, 베이지안)</h2>
<p><strong>Frequentist</strong>: 모델에 대한 참 값이 있으며, 임의로 발생하는 것은 데이터이다.
모델의 파라미터에 대한 참 값이 있으며, 데이터가 랜덤으로 주어지는 것이다.
따라서 데이터에 대해서 이를 가장 잘 설명할 수 있는 <strong>단 하나의 모델</strong>을 찾아야 한다.
→ <strong>Likelihood</strong>를 최대화 하는 값을 찾는 것</p>
<p><strong>Bayesian</strong>: 데이터가 참이며, 이를 가장 잘 설명하는 모델을 선택하는 것
반드시 모델에 대한 <strong>사전확률</strong>을 알아야 한다. <em>(일어나지 않은 일에 대한 불확실성)</em>
사전확률을 알기 위해서는 보통 샘플링을 통하는데,
$\hat{\theta} = argmax\frac{P(\theta)P(D|\theta)}{P(D)}$의 식을 통해 <strong>확률이 최대가 되는 $\theta$</strong>를 찾는다.</p>
<h2 id="10-cross-validation-교차검증">10) Cross Validation (교차검증)</h2>
<p><strong>머신러닝 평가에 필수적으로 사용됨</strong></p>
<h3 id="교차검증이-필요한-이유">교차검증이 필요한 이유</h3>
<p>우리는 데이터를 학습시킬 때 학습용 데이터인 Train Dataset과 평가용 데이터인 Test Dataset로 구성하게 된다.
만약 학습용 데이터인 Train Dataset을 Validation Dataset으로 분리하지 않으면 모델 검증을 위해서 Test Dataset을 사용해야 할 것이다.
결국 고정된 Test Dataset을 가지고 모델의 성능을 확인하며 파라미터를 수정하는 과정을 반복하게 되는데, 이렇게 되면 결국 Test Dataset에만 잘 동작하는 모델이 된다.(Over-Fitting이 된다.)</p>
<p>그래서 이를 해결하기 위해 Test Dataset을 중복없이 바꿔가면서 평가를 진행(교차검증)한다.
이렇게 되면 모든 데이터 셋을 평가 및 훈련에 활용할 수 있으며,
<strong>특정 데이터에 편중(Over-Fitting)을 막고, 데이터 부족으로 인한 Under-Fitting을 막을 수 있다.</strong></p>
<h3 id="교차검증의-종류들">교차검증의 종류들</h3>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/f4e31e68-a7fc-4d8c-9241-47f68262240e/image.png" alt=""></p>
<p><strong>→ K-fold Cross Validation (일반적으로 사용되는 교차 검증 방법)</strong>
데이터를 k개의 데이터 폴드로 분할하고, 각 데이터 폴드 세트에 대해 나온 검증 결과들을 평균내어 최종적인 검증 결과를 도출하는 것</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/c0a844e8-bab5-47d1-af5f-461deb481df1/image.png" alt=""></p>
<p><strong>→ Leave -p- Out Cross Validation</strong>
전체 데이터 중에서 p개의 샘플을 선택해서 모델 검증에 사용하는 방법
이 방법도 마찬가지로 각 데이터 폴드 세트에 대해 나온 검증 결과들을 평균내는데,
이 방법은 경우의 수가 $_nC_p$로 매우 크기 때문에 <strong>부담이 매우 크다</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/999f4f34-07fd-4981-8f13-3cdeabe7f85f/image.png" alt=""></p>
<p><strong>→ Leave -one- Out Cross Validation</strong>
Leave -p- Out Cross Validation보다 계산 시간에 대한 부담은 줄어들고, 더 좋은 결과를 얻을 수 있기 때문에 많이 사용된다.
<strong>모델 검증에 사용되는 데이터의 갯수가 단 1개</strong>이기 때문에 나머지 모든 데이터를 모델 훈련에 사용할 수 있는 것이 큰 장점이다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/ab81a957-2c75-46fd-a079-060bc45024c8/image.png" alt=""></p>
<p><strong>→ Stratified K-Fold Cross Validation</strong>
주로 분류(Classification) 문제에서 사용되며, <strong>label의 분포가 각 클래스별로 불균형을 이룰 때</strong> 유용하게 사용된다.</p>
<h2 id="11-curse-of-dimensionality-차원의-저주">11) Curse of dimensionality (차원의 저주)</h2>
<p>차원의 저주란 변수의 개수(수학적 공간 차원)가 늘어나면서, 문제 계산법이 지수적으로 커지는 상황을 말한다. <em>(차원이 증가하면서 학습데이터 수가 차원의 수보다 적어지므로 개별 차원 내에서 학습할 데이터의 수가 적어지는 것이다.)</em></p>
<p>차원의 저주로 인해 알고리즘 모델링 과정에서 저장공간과 처리시간이 불필요하게 증가된다.
<strong>→ 이는 성능 저하를 의미한다.</strong></p>
<p>물론 변수가 증가한다고 무조건 차원의 저주가 발생하는 것이 아니니 이 부분은 확실히 알아야 한다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/3c25b207-53ee-4abe-a969-53e0c91b1f65/image.png" alt=""></p>
<p>위 그림에서 보면 알 수 있듯이, 오른쪽으로 갈 수록(차원이 증가할 수록) 빈공간이 많이 생겨서 데이터가 서로 멀리 떨어져 있어서 새로운 샘플도 훈련 샘플과 멀리 떨어져 있을 가능성이 높다.</p>
<p>이를 해결하기 위해서는 훈련 샘플의 밀도가 충분히 높아질 때 까지 데이터를 추가하여 훈련 세트의 크기를 키우는 것이다.
<strong>하지만, 차원의 수가 커짐에 따라 필요한 훈련 샘플(데이터)의 수는 기하급수적으로 늘어난다.</strong></p>
<p>그래서 현실적으로는 PCA와 같은 차원 축소 기법을 이용해서 차원의 저주 문제를 해결한다.</p>
<h2 id="12-regression-vs-classification-회귀-분류">12) Regression vs Classification (회귀, 분류)</h2>
<p>지도학습에 사용되는 이 둘은 비슷한 개념이지만 서로 다른 종류의 출력값을 내놓는 모델을 학습하는데 차이를 둔다.</p>
<p>우리가 사용하는 데이터는 <strong>이산적인(Discrete)</strong>값을 가지거나, <strong>연속적인(Continuous)</strong>값을 가지는 데이터로 나눌 수 있다.</p>
<h3 id="regression회귀">Regression(회귀)</h3>
<ul>
<li>예측값으로 <strong>연속적인(Continuous)</strong> 값을 출력</li>
<li>비가 올 확률, 날짜에 따라 변한 데이터에 대한 예측등은 <strong>회귀</strong></li>
</ul>
<h3 id="classification분류">Classification(분류)</h3>
<ul>
<li>예측값으로 <strong>이산적인(Discrete)</strong> 값을 출력</li>
<li>강아지인지 고양이인지를 나누는 것은 <strong>분류</strong></li>
</ul>
<h2 id="13-bayes-theorem-베이즈-정리">13) Bayes theorem (베이즈 정리)</h2>
<p>이전의 경험과 현재의 증거를 토대로 어떤 사건의 확률을 추론하는 과정</p>
<p>베이즈 정리는 확률 $P(A|B)$를 알고있을 때, $P(B|A)$를 계산하기 위해 등장함.</p>
<p>$P(A)$ = $A$의 사전 확률(evidence), <strong>현재의 증거</strong></p>
<p>$P(B)$ = $B$의 사전 확률(prior probability), <strong>과거의 경험</strong></p>
<p>$P(A|B)$ = 사건 $B$가 주어졌을 때 $A$의 조건부 확률(likelihood)</p>
<p>$P(B|A)$ = 사건 $A$라는 증거에 대한 사후 확률(porsterior probability)</p>
<p>베이즈 정리의 가장 큰 특징은 <strong>결과를 관측한 뒤 원인을 추론할 수 있다</strong>는 것이다.</p>
<h2 id="14-conjugate-prior">14) Conjugate prior</h2>
<p>베이즈 정리 식은 아래와 같다.</p>
<p>$$
P(w|D) = \frac{P(D|w)P(w)}{P(D)}
$$</p>
<p>여기서 사후확률인 Posterior를 구하는 것이 문제인데, Bayesian으로 Posterior를 계산한다고 할 때, 각 항목이 일반적인 분포를 따르지 않는다고 하면 도출 방식이 매우 복잡해 질 수 있다.</p>
<p><strong>반대로 likelihood가 특정 분포를 따른다고 가정할 때, Prior와 Posterior가 동일한 분포를 따르면 계산이 매우 편해진다는 것이다.</strong></p>
<p>그래서 이렇게 <strong>Prior</strong>와 <strong>Posterior</strong>가 동일한 분포를 따를 수 있도록 하는 것이 <strong>Conjugate Prior</strong>이다.</p>
<p><strong>→ Conjugate Prior를 사용하면 베이즈 정리 식을 단순화할 수 있다는 의미</strong></p>
<h2 id="15-beta-distribution-베타-분포">15) Beta distribution (베타 분포)</h2>
<p><strong>이항분포에서 발생한 Over-Fitting을 해결하기 위해 나온 분포</strong></p>
<p>베타분포는 베이지안 방법에서 이항 분포의 켤레 사전 분포(Conjugate Prior Distribution)로 활용됨.</p>
<p>관측사건 이벤트가 오기 전에 평균값에 추가 해 주는 것.</p>
<p>→ 이게 무슨 뜻이냐면, 아래 사진에서 <strong><code>prior</code></strong>와 <strong><code>likelihood</code></strong>를 더하면 <strong><code>posterior</code></strong>값이 나온다는 것이 베타분포이다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/4b81c53d-0931-4bca-a54f-e49ad817b768/image.png" alt=""></p>
<h3 id="예시-1">예시</h3>
<p>동전 3번을 던져서 앞면이 연속으로 3번 나왔으면, 이 동전은 무조건 앞면만 나오는 동전인가?
<strong>아니다</strong>, 이것이 과적합. 그래서 이걸 해결하기 위해 <strong>원래 확률이 얼마나 나오는지 사전에 정해주는 것</strong></p>
<h2 id="16-central-limit-theorem-중심극한정리">16) Central limit theorem (중심극한정리)</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/7070df20-8281-462b-a1f9-42a1f720a9f3/image.png" alt=""></p>
<p>가우시안 분포에서 가장 중요한건 <strong>중심극한정리</strong>이다.
위 사진에서 N은 관찰 값이다. ex) 동전을 던졌을 대 <strong>앞이 나올 확률</strong>과 <strong>뒤가 나올 확률 값</strong>
$N=1$이면 동전을 한번만 던졌을 때 <strong>평균 값</strong>이고, $N = 10$이면 10번 던졌을 때 <strong>평균 값</strong>이다.
<strong>→ 동전을 던졌을 때 앞/뒤가 나올 확률은 50%니까 많이 던질수록 정확한 값이 나온다.</strong>
따라서, 표본의 크기가 커질수록(보통 30이상) <strong>정규분포</strong>에 가까워진다는 정리이다.</p>
<h2 id="17-nonparametric-distribution-비모수적-분포">17) Nonparametric distribution (비모수적 분포)</h2>
<p>관측 값이 어느 특정한 확률분포 ex) 정규분포, 이항분포등을 따른다고 전제할 수 없거나, 모집단에 대한 아무런 정보가 없는 경우, 소규모에 실시하는 검정 방법이다.</p>
<p>보통 모집단의 분포가 대칭이라거나, 중앙값이 어디인지 등의 가정을 하는 것이 보통이다.
즉, 자료가 관측치 자체보다 부호나 순위만이 의미가 있는 경우에 자주 이용된다.</p>
<h2 id="18-sequential-learning-순차-학습">18) Sequential Learning (순차 학습)</h2>
<p>MLE 기법은 전체 데이터를 한번에 사용해서 처리하는 batch방식이다.</p>
<p>하지만, 데이터 규모가 커지거나, 데이터가 순차적인 입력으로 주어질 때는 한번에 사용해서 처리하는 batch방식을 사용하기 힘들다.</p>
<p>따라서, 데이터가 순차적으로 입력될 때 에러함수 $E_D$를 $E_D = \sum_nE$로 정의하여 파라미터가 업데이트 되도록 만든다. (<strong>Stochastic Gradient Decent</strong>라는 방식인데, <strong>Sequential Learning</strong>이라고 한다.)</p>
<p>이러한 형태의 알고리즘을 <strong>LMS(least mean square)</strong>이라고 한다.</p>
<h2 id="19-fishers-linear-discriminant-피셔의-선형-분류법">19) Fisher’s Linear discriminant (피셔의 선형 분류법)</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/fa401aae-7f86-467e-b86b-089e75106793/image.png" alt=""></p>
<p><strong>왼쪽: 최소제곱법 사용</strong>, <strong>오른쪽: 로지스틱 회귀 사용</strong>
타겟 벡터가 가우시안 조건부 분포를 가지고 있다는 가정을 하고 있기 때문에 3차원 클래스 분류 문제에서도 최소제곱법은 정확하지 않다. 그래서 나온 분류볍이 <strong>피셔의 선형 분류법</strong>이다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/0c67c656-6d65-4788-935d-f7e6fec32d5e/image.png" alt=""></p>
<p>위 사진을 보면 직관적으로 봐도 오른쪽이 낫다. (오른쪽이 피셔의 선형 판별식)
<strong>→ D차원의 데이터를 1차원의 축으로 투영하되, 같은 클래스 내의 데이터끼리는 최대한 모여있고, 다른 클래스를 가지는 데이터끼리는 최대한 떨어져 있도록 할 수 있는 1차원 벡터를 구하는 것</strong></p>
<h2 id="20-perceptron-퍼셉트론">20) Perceptron (퍼셉트론)</h2>
<p>다수의 입력으로부터 하나의 결과를 내보내는 알고리즘
→ 실제 뇌를 구성하는 신경세포뉴런의 동작과 유사하다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/0ae405d0-8097-4ad2-9c66-ed469a489bef/image.png" alt=""></p>
<p>$x = 입력, w=가중치, y=출력$ </p>
<p>입력값에는 각각의 가중치가 존재하는데, 이 때 가중치의 값이 크면 클수록 해당 입력값이 중요하다는 것을 의미한다.</p>
<h1 id="2-suppose-that-the-two-variabels-x-and-y-are-statistically-independent-show-that-the-mean-and-variance-of-their-sum-satisfies">2. Suppose that the two variabels $x$ and $y$ are statistically independent. Show that the mean and variance of their sum satisfies</h1>
<p>$$
E[x+y] = E[x] + E[y]\
var(x+y) = var(x)+var(y)
$$</p>
<ul>
<li>두 확률 변수 $x, y$의 합의 분산은 각 확률 변수의 분산의 합과 다음과 같은 관계가 있다.
(마지막 항은 양수/음수가 될 수 있다.)</li>
</ul>
<p>$$
var(x + y) = var(x) + var(y) + 2E{(x-\mu _x)(y-\mu _y)}
$$</p>
<ul>
<li>확률 변수 x + y의 기댓값은 <strong>기댓값의 성질로부터 각 확률 변수의 기댓값의 합</strong>과 같다.</li>
</ul>
<p>$$
E[x + y] = \mu_x + \mu _y
$$</p>
<ul>
<li><strong>분산의 정의와 기댓값의 성질로부터 다음이 성립한다.</strong></li>
</ul>
<p>$$
\begin{aligned}
var[x+y] &amp;= E[(x+y-(\mu _x+\mu _y))^2]\
&amp;=E[((x-\mu _x)+(y-\mu _y))^2]\
&amp;=E[(x-\mu _x)^2+2(x-\mu _x)(y-\mu _y)+(y-\mu _y)^2]\
&amp;=E[(x-\mu _x)^2] + E[(y-\mu _y)^2] + 2E[(x-\mu _x)(y-\mu _y)]\
&amp;=var[x]+var[y]+2E[(x-\mu _x)(y-\mu _y)]
\end{aligned}
$$</p>
<ul>
<li><p>두 확률  변수 $x, y$가 서로 독립이라면 $E[(x-\mu _x)(y-\mu _y)] = 0$의 식이 일치한다.</p>
<ul>
<li><p>이 등식을 이용하면 <strong>서로 독립</strong>인 두 확률 변수의 합의 분산은 <strong>각 확률 변수의 분산의 합과 같다</strong>는 것을 볼 수 있다.</p>
<p>  $$
  \begin{aligned}
  var(x+y) &amp;= var(x)+var(y)+2E[(x-\mu _x)(y-\mu _y)]\
  &amp;= var(x) + var(y) + (2\times0)\
  &amp;= var(x) + var(y)
  \end{aligned}
  $$</p>
</li>
</ul>
</li>
</ul>
<h1 id="3-describe-three-types-of-distinct-approaches-to-solving-decision-problem">3. Describe three types of distinct approaches to solving decision problem</h1>
<h2 id="minimizing-the-misclassification-rate-오분류-최소화">Minimizing The Misclassification Rate (오분류 최소화)</h2>
<ul>
<li>의사결정의 목적은 잘못된 분류 가능성을 최대한 줄이는 것</li>
<li>따라서 모든 $x$에 대해서 <strong>특정 클래스로 할당시키는 규칙</strong>이 필요하다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/9e887971-a6f7-42c9-8d54-48f84d84caa7/image.png" alt=""></p>
<ul>
<li>현재 클래스의 구분선을 $\hat{x}$라고 결정 할 경우<ul>
<li>$x ≥ \hat{x}$인 영역에서는 해당 클래스가 $C_2$</li>
<li>$x\ ＜\ \hat{x}$인 영역에서는 해당 클래스가 $C_1$</li>
</ul>
</li>
<li>이렇게 하면 에러의 합은 <strong>청색</strong>, <strong>녹색</strong>, <strong>적색</strong>이 된다.</li>
<li>이를 최소화 하는 영역으로 기준선을 변경해야 하는데, 최소화 하는 지점은 $\hat{x} = x_0$이다.</li>
</ul>
<h2 id="minimizing-the-expected-loss-기대-손실-최소화">Minimizing The Expected Loss (기대 손실 최소화)</h2>
<ul>
<li>오분류 최소화 방법만으로는 오분류의 수를 줄이기엔 부족하다.</li>
<li>예를 들어 암 진단에 대한 오분류의 경우를 생각해보자.<ul>
<li><strong>case1: 암이 아닌데 암인 것으로 진단</strong></li>
<li><strong>case2: 암이 맞는데 암이 아닌 것으로 진단</strong></li>
</ul>
</li>
<li><strong>case1</strong>보다 <strong>case2</strong>가 더 심각하기 때문에 모델에 이러한 정보(패널티)를 주기 위해 생긴 개념인</li>
<li><em>Loss function*</em>이 등장</li>
</ul>
<p>$$
E[L] = \underset{k}{\sum}\underset{j}{\sum}∫<em>{R_i}L</em>{kj}p(x, C_k)dx
$$</p>
<ul>
<li>이 식 자체를 에러함수로 정의해서 사용하면 된다.</li>
</ul>
<h2 id="the-reject-option-리젝트-옵션">The Reject Option (리젝트 옵션)</h2>
<ul>
<li>사후 확률 $p(C_k|x)$또는 결합 확률 $p(x,C_k)$이 1에 가까운 값이 아니라
클래스별로 비슷한 경우 이 $x$에 대해 분류했을 대 에러는 커진다.</li>
<li>이러한 범위에 존재하는 $x$에 대해 특정한 클래스로 할당하는 것이 부담일 수 있다.
이런 경우 결정을 회피하는 기능을 <strong>Reject Option</strong>이라고 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/04b6f1a2-cd26-439b-a9d1-c045b251aa58/image.png" alt=""></p>
<ul>
<li>위 그림에서 보면 알 수 있듯, 사후 확률 값이 특정 수준(threshold)에 미치지 못하면 클래스 분류를 보류하는 것이다.</li>
</ul>
<h1 id="4-describe-the-mixture-of-gaussians-and-its-meaning">4. Describe the mixture of Gaussians and its meaning</h1>
<p>가우시안 분포가 아주 흔하게 사용되는 분포이긴 하지만 현실적으로 가우시안만을 적용하기 어려운 경우가 생겨나기도 한다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/4a7808e4-9dbc-4cba-87d8-d1d14f08a935/image.png" alt=""></p>
<p>위 사진은 옐로스톤 국립공원에 있는 올드 페이스풀 간헐천의 화산 폭발에 대한 측정 데이터이다.</p>
<ul>
<li>가로축: 다음 폭팔까지의 시간</li>
<li>세로축: 폭발 지속시간</li>
</ul>
<p>데이터 집합은 크게 두 개의 지배적인 집단을 형성하고 있는데, 가우시안 분포로는 이를 구성할 수 없다.</p>
<ul>
<li>왼쪽 그림은 하나의 가우시안 분포로 데이터를 표현한 것이고, 오른쪽 그림처럼 표현해야 함</li>
<li><em>→ 두 개의 가우시안 선형 중첩이 더 나은 표현 방식이 될 수 있다.*</em></li>
</ul>
<p>이러한 문제를 해결하기 위해 혼합 가우시안 모델이 나왔다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/e7f0a33c-da57-4bf7-bfbb-6741d1b09408/image.png" alt=""></p>
<p>가우시안 선형 결합을 통해 매우 복잡한 밀도를 표현할 수 있다.
→ 선형 결합의 계수 뿐 아니라 평균과 공분산 파라미터를 조절함으로써 거의 대부분의 연속 밀도를 임의의 정확도로 근사가 가능하다.</p>
<ul>
<li>혼합 가우시안 분포의 파라미터는 $\pi, \mu, \sum$이며, 파라미터 값을 설정하기 위해 <strong>MLE를 사용</strong>한다.</li>
<li>미분을 취해 최대값을 가지는 모수를 찾는 방식이 아니라 <strong>반복적 수치 최적화 기법이 요구</strong>된다.</li>
</ul>
<h1 id="5-explain-the-difference-between-maximum-likelihood-estimation-and-maximum-a-posterior-and-describe-what-they-mean">5. Explain the difference between Maximum Likelihood Estimation and Maximum A Posterior and describe what they mean</h1>
<h2 id="최대우도추정mle">최대우도추정(MLE)</h2>
<p>현재 가지고 있는 <strong>데이터셋이 나올 확률을 최대화</strong>하는 <strong>우도(Likelihood)$\theta$</strong>를 구하는 것</p>
<p>$$
\hat{\theta} = argmax_\theta P(D|\theta)
$$</p>
<p>$\hat{\theta}$는 $P(D|\theta)$를 최대로 하는 $\theta$이고 <strong>최종식</strong>은 $\hat{\theta}_{MLE} = \frac{\alpha_H}{\alpha_H+\alpha_T}$이다.
결국 $\hat{\theta}$에 영향을 미치는 것은 $\alpha_H$와 $\alpha_T$의 비율이다.</p>
<p>또한 이건 추정값이기 때문에 실제값과 오차값이 있다.
오차의 범위를 구하는 식은 $N = \alpha_H + \alpha_T$이다.</p>
<h2 id="최대사후확률추정mae">최대사후확률추정(MAE)</h2>
<p>데이터셋이 나올 확률을 최대화 하는 것이 아닌, <strong>사후확률(Posterior)인 $P(\theta|D)$</strong>를 <strong>최대화</strong> 하는 것</p>
<p>$$
\hat{\theta} = argmax_\theta P(\theta|D)
$$</p>
<p>$P(D)$는 상수이므로 위 식을 아래와 같이 변형 해도 $\hat{\theta}$의 값은 변하지 않는다.</p>
<p>$$
\begin{aligned}</p>
<p>\hat{\theta} &amp;= argmax_ \theta P(D|\theta)P(\theta)\
&amp;= argmax_\theta [\theta^{\alpha_H+\alpha-1}(1-\theta)^{\alpha_T+\beta-1}]</p>
<p>\end{aligned}
$$</p>
<p>여기서 최대 우도 추정에서와 동일하게 $argmax$이하의 식에 로그를 취하고, 미분하여 그 값이 0이 되는 $\theta$를 찾은 <strong>최종식</strong>은 $\hat{\theta}_{MAP} = \frac{\alpha_H+\alpha-1}{\alpha_H+\alpha+\alpha_T+\beta-2}$ 이다.</p>
<p>최대우도추정(MLE)과 최대사후확률추정을 통해 추정한 특정 사건의 확률 $\theta$는 비슷한 모양새를 띠고 있지만, 베타분포 내의 상수가 $\alpha = \beta = 1$일 경우에만 같아진다.
하지만, 시행횟수 $N$이 커지면, 데이터셋의 크기가 커질수록 상수인 $\alpha, \beta$에 비해 $\alpha_H, \alpha_T$가 커지게 되기 때문에 $N$이 커질수록 <strong>최대우도추정으로 구한$\theta$</strong>와 <strong>최대사후확률추정으로 구한$\theta$</strong>가 <strong>비슷</strong>해진다.</p>
<h1 id="6-describe-the-algorithm-of-the-perceptron">6. Describe the algorithm of the perceptron</h1>
<p>퍼셉트론은 인공신경망(ANN)의 구성요소(unit)로써 <strong>다수의 값을 입력</strong>받아 <strong>하나의 값으로 출력</strong>하는 <strong>알고리즘</strong>이며, <strong>이진분류 모델을 학습</strong>하기 위한 <strong>지도학습 기반의 알고리즘</strong>이다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/07f49333-87aa-4c69-bce1-9f94edd77588/image.png" alt=""></p>
<p>퍼셉트론은 다른 뉴런으로부터 신호를 입력받듯, 다수의 값 $x$를 입력받고,
입력된 값마다 가중치($weight)$를 곱한다.
입력값으로 $x$외에도 편향($bias)$은 딥러닝 모델 최적화의 중요 변수 중 하나이다.</p>
<p>일반적으로 입력값을 1로 고정하고 편향을 곱한 변수로 표현하는데,
이 때 입력값과 가중치의 곱, 편향은 퍼셉트론으로 전달된다.
퍼셉트론은 입력받은 값을 <strong>모두</strong> <strong>합</strong>산하는데, <strong>합산된 결괏값을 가중합</strong>이라 부른다.</p>
<p>퍼셉트론에서는 <strong>가중합</strong>의 크기를 임계값($\theta$, Threshold)과 비교하는 <strong>활성화 함수</strong>(Activation Function)를 거쳐 최종 출력값을 결정한다.
가중합의 크기는 편향의 크기로 조절할 수 있기 때문에, 편향이 퍼셉트론의 출력값 $y$를 결정짓는 중요한 변수이다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/5a44b6fc-d39f-494a-be18-4a37b927dfeb/image.png" alt=""></p>
<p>인공신경망과 다르게, 퍼셉트론은 활성화 합수로 <strong>계단 함수</strong>(Step Function)을 사용한다.
계단 함수의 일종인 $sign$함수를 사용하면 가중합이 임계값보다 클 경우 $+1$을 출력하고, 그렇지 않다면 $-1$을 출력한다.</p>
<h2 id="퍼셉트론의-종류">퍼셉트론의 종류</h2>
<ul>
<li><strong>은닉층이 있으면</strong> <strong>단층</strong> 퍼셉트론(Single-Layer)<ul>
<li>단층 퍼셉트론은 출력값을 구분짓는 직선을 1개밖에 그리지 못하기 때문에
XOR 게이트를 구현할 수 없다.</li>
</ul>
</li>
<li><strong>은닉층이 없으면</strong> <strong>다층</strong> 퍼셉트론(Multi-Layer-Perseptron, MLP)<ul>
<li>XOR게이트를 구현하지 못하는 단층 퍼셉트론의 한계를 보완하기 위함</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a3e05657-5aea-46c2-b2e0-45b3e9045c55/image.png" alt=""></p>
<p>→ <strong>일반적으로 2개 이상의 은닉층</strong>을 가진 다층 퍼셉트론을 <strong>심층신경망(DNN)</strong>이라고 함</p>
<h2 id="퍼셉트론-수렴-법칙">퍼셉트론 수렴 법칙</h2>
<ul>
<li>정확한 해법이 있다는 조건에서는 일정 횟수를 반복하면 정확한 해법을 찾을 수 있다.</li>
<li>실제 수렴하기까지 요구되는 단계의 수는 알기 어렵다.</li>
<li>실제 데이터가 수렴 가능한 조건일지라도 여러 해법이 존재한다.<ul>
<li><code>파라미터 초기값</code>에 의존하는 알고리즘</li>
<li><code>데이터 순서</code>에 의존하는 알고리즘</li>
</ul>
</li>
<li>퍼셉트론의 출력값은 확률값이 아니다.</li>
<li>중요한 제약 중 하나는 고정된 기저함수의 선형 결합을 기반으로 한다는 것이다.</li>
</ul>
<h1 id="7-aside-from-the-above-describe-three-topics-in-your-textbooks-that-you-are-most-interested-in-deeply-influenced-by-or-consider-important">7. Aside from the above, describe three topics in your textbooks that you are most interested in, deeply influenced by, or consider important</h1>
<h2 id="1-minimizing-the-misclassification-rate-오분류-최소화">1. Minimizing The Misclassification Rate (오분류 최소화)</h2>
<p>기본적으로 분류에 있어 목적은 어찌보면 잘못된 분류 가능성을 최대한 줄이는 것이다.
따라서 모든 $x$에 대해서 특정 클래스로 할당시키는 규칙이 필요하다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/df4c2839-beb9-421f-b81d-90238693aac5/image.png" alt=""></p>
<p>위 사진을 보고 쉽게 이해해보자.</p>
<ul>
<li>현재 클래스의 구분선을 $\hat{x}$으로 결정했다고 가정하게되면<ul>
<li>$x ≥ \hat{x}$영역은 $C_2$로 결정되고, $x ＜ \hat{x}$영역은 $C_1$로 결정된다.</li>
</ul>
</li>
<li>빨간색 부분의 에러를 지워야하는데, 초록색 부분이 줄어들면 오히려 좋다.
왜냐하면, 원래 $C_2$인데, $C_1$으로 오분류 했던 부분이기도 하고,
빨간색 부분의 오분류와 함께 줄어들기 때문이다.</li>
<li>따라서 면적을 최소화 하는 방법은 $\hat{x} = x_0$인 지점이다.</li>
</ul>
<h2 id="2-the-perceptron-algorithm-퍼셉트론-알고리즘">2. The Perceptron Algorithm (퍼셉트론 알고리즘)</h2>
<p>신경망 등에서 사용되는 알고리즘이며, 아주 간단한 형태의 binary class 퍼셉트론만 확인한다.</p>
<p>여기서는 기저함수를 넣어 $y(x) = f(w^T\phi(x))$로 표현하며, $\phi_0(x) = 1$이다.</p>
<ul>
<li><p>기저함수를 사용하는 이유는 <code>feature vector</code> 때문이다.</p>
<ul>
<li><strong>feature vector</strong>란?
예시로 3 x 3(2차원) → 9(1차원)으로 변환하여 원래있던 데이터를 잘 표현하는 것이다.</li>
<li><em>기저함수*</em>가 <strong>음성영역</strong>에서는 <strong>FFT</strong>, <strong>딥러닝</strong>에서는 <strong>인코딩 벡터</strong>라고 생각하면 된다.</li>
</ul>
</li>
<li><p>퍼셉트론 알고리즘에서 $f$는 활성함수로, 가장 간단한 형태는 아래와 같다.</p>
<p>  $$
  f(a) = \begin{cases} </p>
<pre><code>+1, a ≥ 0 \\
-1, a &lt; 0</code></pre><p>  \end{cases}
  $$</p>
</li>
<li><p>퍼셉트론에서도 $w$(가중치)를 구하는것이 주 목표이다.</p>
</li>
<li><p><strong>오분류된 데이터의 수만 가질 때</strong> 퍼셉트론 알고리즘에서는 $w$에 대해 상수값을 가지고,
불연속적인 값을 가지게 되므로 미분이나 Gradient 방식을 사용할 수 없다.</p>
</li>
</ul>
<p><strong>따라서 에러함수의 경우 아래와 같이 정의하게 된다.</strong></p>
<p>$$
E_P(x) = -\underset{n∈M}{\sum}w^\Tau \phi_n t_n
$$</p>
<ul>
<li>$\sum$앞에 $-$가 붙은 이유<ul>
<li>$\phi_n$또는 $t_n$이 둘 다 $+$이거나 $-$일 때가 잘 분류 된 상태인데, 오분류 되면 둘 중 하나가 $-$이기 때문에 $+$가 되는 때를 오분류된 때라고 판단하기 위해</li>
<li>이런식으로 정의하면 오분류된 샘플$M$이 없을 때 에러 함수 값이 0이 되고, 그 외에는 값이 커진다.</li>
</ul>
</li>
</ul>
<ul>
<li>$\phi_n = \phi(x_n)$ 정의</li>
<li>$M$ = 오분류된 데이터 집합</li>
<li>만약 $x_n$이 $C_1$에 속한다면 $w^\Tau \phi(x_n) &gt; 0$</li>
<li>만약 $x_n$이 $C_2$에 속한다면 $w^\Tau \phi(x_n) &lt; 0$</li>
</ul>
<h2 id="3-probabilitic-generative-models-확률-생성-모델">3. Probabilitic Generative Models (확률 생성 모델)</h2>
<p><strong>왜 생성(Generative) 모델인가?</strong>
$p(x|C_1)$부터 시작하는지, $p(C_1|x)$부터 시작하는지에 따라 생성모델인지, 사후분포를 따라가는지가 나뉜다.
$p(x|C_1)$부터 시작하면 생성모델이다.</p>
<p>$$
p(C_1|x) = \frac{p(x|C_1)p(C_1)}{p(x|C_1)p(C_1) + p(x|C_2)p(C_2)} = \frac{1}{1+exp(-a)}=\sigma(a)
$$</p>
<p><strong>위 식에서 $p(x|C_1)p(C_1)$이란?</strong>
$p(x|C_k)$ = class-conditional(조건부 밀도)
$p(C_k)$ = prior(사전 분포)</p>
<p><strong>binary class</strong>에 한해서 $p(C_1|x)p(x) = p(x|C_1)p(C_1)$이다.
여기서 $x$는 class에 속한 하나의 데이터이다.</p>
<p><strong>위 식에서 $\sigma$는 로지스틱 시그모이드 함수이다.</strong>
$\sigma(a) = \frac{1}{1+exp(-a)}$는 <strong><code>sigmoid</code></strong>를 뜻한다.</p>
<p>만약 <strong>multi class</strong>라면 아래 식과 같이 표기할 수 있다.</p>
<p>$$
p(C_k|x) = \frac{p(x|C_k)p(C_k)}{\sum_jp(x|C_j)p(C_j)} = \frac{exp(a_k)}{\sum_jexp(a_j)}
$$</p>
<p><strong>위 식은 같은 의미이지만 3가지로 불린다.</strong></p>
<ol>
<li>normalized exponential 함수</li>
<li>다중 클래스 분류에 사용되는 시그모이드 함수</li>
<li><strong><code>softmax</code> function</strong></li>
</ol>
<p><strong>여기서 알 수 있다. 딥러닝</strong>에서 이진분류를 쓸 때는 <strong><code>sigmoid</code></strong>, 다중분류를 쓸 때는 <strong><code>softmax</code></strong>를 사용해서 코드를 작성하는 이유가 위 식에 따른 이유이다.
<strong>단, 미세한 조정이 필요한 경우에는 평활화(Smooth)작업이 필요하다.</strong></p>
<p>결과적으로 multi class에서 사용하게 되면 $p(C_1|x) = \sigma(w^Tx+w_0) = \sigma(a)$이다.</p>
<p>$$
\therefore a = w^Tx+w_0
$$</p>
<p>학습에 가장 중요했던 $wx+b$(1차원 방정식)이랑 매우 유사한 것을 알 수 있다.
<strong>원래 인공지능이 가정을 하면서 추론을 하는 것이기 때문에 그런 것을 기억하자.</strong></p>
<hr>
<h1 id="참고자료">참고자료</h1>
<ol>
<li><a href="http://norman3.github.io/prml/">PRML (norman3.github.io)</a></li>
<li><a href="https://itrepo.tistory.com/17">(5) Model Capacity (tistory.com)</a></li>
<li><a href="https://simsim231.tistory.com/93">[Deep Learning] Regularization — 심심한 개발 블로그 (tistory.com)</a></li>
<li><a href="https://study2give.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%86%90%EC%8B%A4%ED%95%A8%EC%88%982-%EC%97%94%ED%8A%B8%EB%A1%9C%ED%94%BCEntropy">[머신러닝] 손실함수(loss function) (2) - 엔트로피(Entropy) (tistory.com)</a></li>
<li><a href="https://jrc-park.tistory.com/141">Frequentist vs Bayesian (tistory.com)</a></li>
<li><a href="https://m.blog.naver.com/ckdgus1433/221599517834">교차 검증(cross validation) : 네이버 블로그 (naver.com)</a></li>
<li><a href="https://for-my-wealthy-life.tistory.com/40">차원의 저주 개념, 발생 원인과 해결 방법 (tistory.com)</a></li>
<li><a href="https://yhyun225.tistory.com/8">머신러닝 - 회귀(Regression) VS 분류(Classification) (tistory.com)</a></li>
<li><a href="https://blog.naver.com/mykepzzang/220834940797">[확률과 통계] 14. 베이즈 정리, Baye.. : 네이버블로그 (naver.com)</a></li>
<li><a href="https://blog.acronym.co.kr/437">Conjugate Prior에 대하여 :: 미니의 꿈꾸는 독서, 그리고 프로그래밍 이야기 (acronym.co.kr)</a></li>
<li><a href="https://wikidocs.net/24958">07-01 퍼셉트론(Perceptron) - 딥 러닝을 이용한 자연어 처리 입문 (wikidocs.net)</a></li>
<li><a href="https://datascienceschool.net/02%20mathematics/07.03%20%EB%B6%84%EC%82%B0%EA%B3%BC%20%ED%91%9C%EC%A4%80%ED%8E%B8%EC%B0%A8.html">7.3 분산과 표준편차 — 데이터 사이언스 스쿨 (datascienceschool.net)</a></li>
<li><a href="https://yngie-c.github.io/machine%20learning/2020/04/04/mle_map/">최대 우도 추정 &amp; 최대 사후 확률 추정 (MLE &amp; MAE) · Data Science (yngie-c.github.io)</a></li>
<li><a href="https://heytech.tistory.com/332">[Deep Learning] 퍼셉트론(Perceptron) 개념 이해 (tistory.com)</a></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[REALFORCE R3 for MAC(white) 후기]]></title>
            <link>https://velog.io/@kc0584-dev/REAL-FORCE-R3-for-MACwhite-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@kc0584-dev/REAL-FORCE-R3-for-MACwhite-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Fri, 02 Dec 2022 12:34:20 GMT</pubDate>
            <description><![CDATA[<p>흔들린 멘탈을 복구하고자 내 인생에서 두번째로 나를 위한 선물을 준비했다.
<del><em>첫번째 선물은 Mac Book Air M1</em></del></p>
<h1 id="언박싱">언박싱</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/91473159-2b00-458b-a08a-5a6f4d5b7bb5/image.png" alt=""></p>
<blockquote>
<p><strong>두근두근..</strong></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/4af9ceb4-18cf-46b1-8430-a91d6d168a14/image.png" alt=""></p>
<blockquote>
<p><strong>이 영롱한 자태.. 과연 키보드계의 에르메스라고 불린다..</strong>
에르메스인 이유는 키보드 하나에 가격이 40만원을 넘어가기 때문ㅋㅋ</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/8193c0f9-78e2-4509-8bf1-95ba80655f48/image.png" alt="">
구성품은 간단했다. <code>키보드</code>, <code>USB to C</code>, <code>AA 건전지 2개</code>, <code>설명서</code>
Mac 전용 스킨이라서 더 끌렸던 것 같다.</p>
<p>나는 원래 한무무 키보드를 썼었다.
무접점 특유의 느낌을 너무나도 좋아하기 때문에 잘 사용했는데, 노뿌가 아닌 토프레를 경험해보고 싶었다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/2947975c-b35a-48b3-889a-d2919d725eae/image.png" alt=""></p>
<blockquote>
<p>왼쪽 상단에 있는 키보드가 원래 쓰던 <strong>한무무</strong>
키캡 놀이를 좋아해서 벚꽃 키캡을 구매했었다. <del>(사과농장..?)</del></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/4de88a86-d726-4324-a449-20bfd874d582/image.png" alt="">
나는 맥북과 연구실 컴퓨터(윈도우)를 왔다갔다 하면서 사용을 하기 때문에 꼭 블루투스가 내장된 제품을 사고싶었다.
하지만 <code>리얼포스 R2</code>까지는 블루투스를 제공하지 않았고, 토프레 계열의 <code>해피해킹 하이브리드</code> 키보드는 블루투스를 제공했으나 키배열이 나한텐 너무 지옥같을 것 같아서 사지 않았다.</p>
<h1 id="장단점">장단점</h1>
<h2 id="단점">단점</h2>
<p>노뿌 무접점 키보드는 한무무, 콕스, 해커를 사용 해 봤는데 다 너무 좋았었다.
특히 키보드를 누를 때 <strong>보글보글</strong>한 느낌이 너무 좋았다.</p>
<p>근데 나는 레오폴드, 리얼포스, 해피해킹같은 토프레 무접점 키보드는 사용해보지 않아서 너무너무 궁금했다.
들리는 후기로는 약간 얼린 초콜릿을 부러트리는 <strong>도각도각</strong>한 느낌이라고 했기 때문</p>
<blockquote>
<p><strong>개인 취향 차이입니다.</strong></p>
</blockquote>
<p>나는 근데 한무무가 더 타건감에 있어서는 더 좋은것 같다.
리얼포스는 뭔가... 모래를 쓸어내리는 듯한.. <strong>사각사각</strong> 느낌?
이런 느낌을 별로 안좋아해서 나는 <strong>레오폴드 적축 키보드</strong>도 연구실 후배한테 그냥 줘버렸다.
<del>공짜로 줬더니 후배가 실수로 박살내버린건 좀 슬프다</del></p>
<p>또 문제는, 모든 키의 키압이 동일하지 않다는 점.
어떤 키들은 10%의 힘만 줘도 눌러지는 반면 어떤 키들은 30%의 힘을 줘야 눌러진다거나..?</p>
<p>또 또 문제는, 40만원짜리 키보드 치고는 마감처리가 진짜 2만원짜리 키보드같다.
스페이스바 밑에 약간의 베젤같은 공간을 눌러보면 <strong>붕 떠있는</strong> 문제가 있고,
키 배열도 약간씩 틀어져있다.</p>
<p>여튼 그래도 디자인도 개인적으로는 맘에 들고, 유튜브에서 키보드 타건 ASMR 같은 걸 들으면 정말 짜릿한 소리들이 들려오는데, 그 소리를 내기 위해선 약간의 <strong>튜닝</strong> 작업이 필요하다.
그래서 공장 말고 <strong>공방</strong>에 10만원주고 <code>윤활 작업</code> + <code>보강판</code> + <code>스프링</code> + <code>오링</code> 교체 작업을 요청했다.</p>
<p>이 작업을 지나가면 모든 사람들이 만족하는 그런 키보드가 된다고 하는데.........
결국 키보드에만 50만원을 썼다...</p>
<h2 id="장점">장점</h2>
<p>맥북과 윈도우를 넘나들 때 키보드 변환 속도가 정말 빠르다.
그리고 리얼포스에서 제공하는 소프트웨어를 설치하면 키맵핑을 변경할 수 있다.
그래서 난 잘 사용하지 않는 <code>Caps Lock</code>키를 한영변환으로 사용하고 있다.
<strong>맥북 M1에서도 기본값으로 Caps Lock키가 한영변환 키라서 더 편한것도 있다.</strong></p>
<p>나머지는... 윤활 작업을 마치고 더 써보려 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[앞으로 블로그 방향성?]]></title>
            <link>https://velog.io/@kc0584-dev/%EC%95%9E%EC%9C%BC%EB%A1%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EB%B0%A9%ED%96%A5%EC%84%B1</link>
            <guid>https://velog.io/@kc0584-dev/%EC%95%9E%EC%9C%BC%EB%A1%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EB%B0%A9%ED%96%A5%EC%84%B1</guid>
            <pubDate>Sun, 27 Nov 2022 08:29:02 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>썸네일은 내 일정표!</p>
</blockquote>
<h1 id="당장-눈-앞의-목표">당장 눈 앞의 목표?</h1>
<p>다 무너져가던 연구실이 갑자기 엄청 활성화 됐다.</p>
<p>이번 SKT FLYAI 갔다오고 난 후에 연구실 인원이 4명에서 8명으로 늘었다..</p>
<p>요즘 인공지능이나 임베디드에 관심 많은 친구들이 많아져서 그런 것 같다.</p>
<p>그래서 미루고 미루던 블로그를 다시 작성 해보려 하는데, 어떻게 작성할지 나 혼자서라도 다짐하려 한다.</p>
<h1 id="연구과제">연구과제</h1>
<p>연구실에 인원수가 늘어난 만큼 연구과제도 많아졌다.
그래서 한 개의 연구과제를 메인으로 잡고 <code>ML/DL</code>, <code>Client</code>, <code>Backend</code>를 처음부터 설계하고 마무리 지어보려 한다.<strong>(2달 예상)</strong></p>
<p>물론 그냥 연구과제라서 실 서비스까진 하지 않지만, 공부할 겸 모든 진행상황을 블로그에 시리즈로 기록하며 내 걸로 만들어 보려 한다.</p>
<p>여기서 Client는 맨날 쓰던 Flutter는 내다 버리고 Swift와 Kotlin을 사용해서 Native로 개발 해 볼 생각이다.</p>
<p>Backend는.. <code>Java(Spring)</code>과 <code>Python</code>, <code>JavaScript</code> 세 개중에 고민인데, 이 참에 <code>Java(Spring)</code>도 공부 해볼까 한다.</p>
<p>이번 SKT 면접을 갔다 오고서도 그렇지만, 항상 느낀다.
세상엔 진짜 똑똑한 사람들이 많고, 나이에 맞지 않는 듯한 엄청난 스펙, 그에 맞는 노력들.. <strong>이 사람들을 보며 항상 반성하고 성장하자.</strong></p>
<h1 id="졸업논문">졸업논문</h1>
<p>이게 제일문제다 ㅋㅋ <strong>(이미 석사 졸업 유예됨)</strong>
졸업논문 마무리를 지어야하는데 <code>나 혼자 하루가 42시간</code> 인 것 같다.
잠은 죽어서 자야 하는듯? 너무 바쁘다..</p>
<p>졸업논문은 실험 진행정도가 어느정도 됐지만, 다 엎고 처음부터 할까도 고민중이라.. 만약 엎으면 이 또한 시리즈로 기록하려한다.</p>
<h1 id="코딩테스트">코딩테스트</h1>
<p>어차피 당장 최종 목표는 <strong>취업</strong>이니, 코딩테스트 또한 게을리 하면 안될 것 같다고 생각하던 찰나, SKT FLYAI 진행할 때 함께 코딩테스트 스터디를 진행하던 분께 연락이 왔다.</p>
<p>이 때다 싶어 함께 하기로 했다.. 한 번에 잘할 생각 하지 말고, 꾸준히 노력하자.</p>
<h1 id="어학--자격증">어학 / 자격증</h1>
<p>나는 어학(토익, 오픽 등), 자격증 아무것도 없다.
사실 돌이켜 생각해보면 <strong>SKT 면접</strong>에서 아무리 잘 했다고 해도 내가 면접관이어도 나같은 놈 안뽑을 것 같다고 생각이 들었다.</p>
<p><strong>기본도 없는데</strong> 뭘 믿고 날 뽑나? 라는 생각도 스스로 하게 됐다.
그래서 어학은 <strong><code>오픽기준 IH</code></strong>, 자격증은 <strong><code>정처기 실기</code></strong>만 남아서 마무리 지어보려 한다.</p>
<blockquote>
<p><strong>위 항목 다 마무리 짓고 다시 SKT 도전하려한다.</strong>
ㅋㅋ 딱 대 SKT! 부족한거 다 채우고 가겠습니다..!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLY AI 1기 그 이후..]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLY-AI-1%EA%B8%B0-%EA%B7%B8-%EC%9D%B4%ED%9B%84</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLY-AI-1%EA%B8%B0-%EA%B7%B8-%EC%9D%B4%ED%9B%84</guid>
            <pubDate>Sat, 05 Nov 2022 15:54:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>후기 이전에 먼저, SKT FLY AI 1기 하면서 촬영해 주신 영상이 유튜브에 업로드 되었다.</strong>
<a href="https://www.youtube.com/watch?v=-8oySfWywFU">SKT FLY AI 1기 스케치 영상</a></p>
</blockquote>
<h1 id="그-이후">그 이후..</h1>
<p>2차, 3차, 4차 후기들을 작성해야하는데 아직 대학원생 신분이기 때문에 시간에 쫒겨 거의 매일을 밤새고있다.</p>
<p>매주 4개의 전공과목 실습 조교를 하기 때문에 수업 준비를 하는데 시간이 정말 많이 들고, 제출해야하는 논문과 논문 실험들, 연구과제등이 끊임없이 생기고 있다..</p>
<p>최근 기계공학과에서 자기들이 개발한 기계에 연동할 수 있는 앱 하나만 개발 해달라고 해서 1~2일만에 앱 하나 만들어 드렸더니 대상 탔다더라. <em>(뿌듯)</em></p>
<blockquote>
<p><strong>여튼 간단하게 그 이후에 어떤일들이 있었냐면..</strong></p>
</blockquote>
<ol>
<li>SKT에서 취업을 위해 자기소개서 작성법, 면접 팁 같은 중요 정보들을 알려주는 기간이 있었다.</li>
<li>SKT FLY AI 팀원들과 인공지능을 강의 해 주셨던 강사님 한분을 찾아뵈러 부산에 1박 2일 다녀왔다.</li>
<li><strong>SKT 우수수료생의 혜택으로 필기전형{인적성(SKCT), 코딩테스트}을 면제받고 이번에 서류 통과했다.</strong></li>
</ol>
<p><em>(서류는 따로 혜택 없음, 알아서 준비)</em>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/58965f94-b2ff-4d48-b7e6-d4977cccb3ee/image.png" alt=""></p>
<ol start="4">
<li>다음 주 1박 2일 1차 면접이 진행된다. 후회없이 모든 걸 쏟아보고 오려한다.</li>
</ol>
<p>면접 다 보고! 결과가 어떻게 나오든 좀 여유로워 졌을 때 남은 후기들을 작성 해보려 한다.
당장 바로 앞의 목표는 <strong>SKT 개발팀에 입사하는거니까..</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI AI Challenger 1기 후기]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-AI-Challenger-1%EA%B8%B0-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-AI-Challenger-1%EA%B8%B0-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Wed, 07 Sep 2022 05:42:39 GMT</pubDate>
            <description><![CDATA[<p>너무 쓸 내용이 많아서 머리속에서 정리가 잘 안되네요.
그동안 받았던 질문들 중 가장 많은 질문을 받았던 답을 해드리도록 하겠습니다.
제 <code>Github</code>가 궁금하다면 <a href="https://github.com/Hitbee-dev/Hitbee-dev/tree/velog_skt">여기로!</a></p>
<h1 id="qa">Q&amp;A</h1>
<blockquote>
<p><strong>SKT를 거의 찬양하다 싶이 작성해 뒀던데, 홍보비를 받았거나 SKT에서 작성해달라고 요청이 왔나요?</strong></p>
</blockquote>
<p>전혀 아닙니다. 블로그 작성에 대한 모든 글은 제 개인적인 생각과 경험을 작성 해 둔 것이고,
SKT분들에게 잘 보이려고 작성한건 더더욱 아닙니다. 다음 기수 분들이 보고 도움이 되길바라며 블로그를 작성했습니다.
애초에 그럴 목적이었으면 읍소의 끝을 보여드렸을겁니다 ㅎ..</p>
<p>제가 <code>SSAFY 8기</code>와 <code>SKT FLYAI</code>를 합격했을때 많은 고민없이 SKT를 선택한 이유와 SK그룹을 좋아하는 이유도 개인적인 이유입니다.
그 이유에 대해 간단히 말씀드리도록 하겠습니다.</p>
<blockquote>
<p><strong><em>먼저 말씀드리지만, 절대 확대 해석하지 말아주시기 바랍니다. 개인적인 경험입니다.</em></strong></p>
</blockquote>
<p>과거에 반도체 계열 중소기업에서 3년간 재직했던 경험이 있는데, 이 회사에서의 고객사는<code>SK하이닉스</code>와 <code>A회사</code>였습니다.
당시 <code>A회사</code> 담당자분들 중 대부분은 너무나 <strong>무서운 분들</strong>이었고, <code>SK하이닉스</code> 분들은 <strong>천사</strong>라는 느낌이 강했습니다.
또한, 업무를 진행함에 있어 재직하던 회사가 고객사의 하청업체임에도 한 사람의 인격을 존중해주는듯한 말투와 배려심이 더 좋았던 회사가 <strong>SK하이닉스</strong>였습니다.</p>
<p><strong><em>당연히 이 부분은 사람마다의 차이가 있습니다. <code>A회사</code> 담당자 분들 중에도 너무도 착하신분들이 많이 있었습니다.
제가 만났던 분들이 저랑 안 맞았던 것일 가능성이 높고, 절대 특정기업을 까내릴려고 작성하는 글이 아님을 다시한번 말씀드립니다.</em></strong></p>
<p>원체 외향적이고 사람들과 소통하기 좋아하는 저는, 업무가 아닌 개인적으로 <code>A회사</code>분들과도 <code>SK하이닉스</code>분들과도 간간히 연락을 주고받았던 분들이 있었습니다.
그래서 사내 문화에 대한 이야기들도 많이 들었는데, 제가 더 가고싶다고 생각하는 <strong>회사 문화</strong>는 SK의 문화였습니다.</p>
<p>그래서 블로그를 작성할 때에도 제 감정이 들어가다 보니 <code>SKT를 너무 찬양하는게 아니냐</code>라는 이야기도 몇번 들었던 것 같습니다.</p>
<h1 id="후기">후기</h1>
<p><strong>정말 즐거웠고, 많은 지식을 얻었고, 좋은 문화들을 경험하고, 많은 사람들을 얻었다.</strong>
맨 처음 FLYAI 교육과정에 최종합격 되었다는 메일을 받았을 때는 세상을 다 가진 기분이었지만, 가장 걱정했던건 <code>돈</code>이었다.</p>
<p>대학원생이 돈이 어디있겠나.. 본가는 <strong>천안</strong>이지, 교육받는 곳은 <strong>서울</strong>이지..
<strong>그래서 아버지한테 내 인생 처음이자 마지막으로 이번 교육을 받는동안 2달동안만 금전적으로 도와달라고 말씀드렸다.</strong></p>
<p><strong>고민도 안하고 아버지는 내 통장에 500만원을 꽂아주셨다.</strong>
그리고 이렇게 말씀하셨다.</p>
<blockquote>
<p>서울가서 너가 할수 있는 모든걸 보여주고, 그 이상의 퍼포먼스를 보여줘라.
어떤 상이던 수상하지 못해도 좋다. 너가 보여줄 수 없으면 그만큼 더 많이 배워와라.</p>
</blockquote>
<p>이렇게 내가 하고싶은 일을 할 수 있게 지원해주시는 아버지께 너무 감사했다.
솔직히 저 돈이면 2달동안 서울에서 자취하는게 훨씬 편했을거고, 교육외 시간에 더 많은 공부를 할 수 있었을거다.
하지만, 나는 5년 이상의 시간동안 자취생활을 했기 때문에 성인이 된 후 아버지와 보내는 시간이 많지않았었고,
퇴근하고 돌아왔을 때 본가에 있는 나를 보며 너무 행복해 하시는 아버지의 표정에 차마 서울에서 또 자취를 할 수는 없었다.
<strong>(수상 직후 대상을 2개 수상했다고 아버지께 전해드렸을 때 태어나서 처음으로 아버지가 우시는 목소리를 들었다. 더 좋은 일들로 많이 울려드려야겠다고 생각했다..)</strong></p>
<p>그래서 나는 <code>천안 &lt;-&gt; 서울</code>을 <code>KTX</code>, <code>지하철</code>, <code>버스</code>를 타고 매일 교육을 받으러 왔다.
다시 돌이켜 생각해보면 왕복으로 매일 이동시간만 <strong>5시간</strong>이 넘는데, 어떻게 매일 왔다갔다 할 수 있었는지 놀랍다.
그만큼 많이 배우고 싶었고, 내 인생에서 다시는 없을 기회라고 생각했다.</p>
<blockquote>
<p><strong>내가 배운것?</strong></p>
</blockquote>
<p>CNN? RNN? Azure, Docker???
아니, 나는 이 교육과정에서 가장 크게 배워간 건 <code>사람</code>이었다.<strong>(당연히 교육과정에 대해서 정말 많이 배웠습니다. 감사합니다.)</strong>
평생을 지방에서 살아온 나는 항상 들었던 의문점이 있었다.</p>
<p><strong>왜 그렇게 서울에서는 교육열이 강하고, 뭔가를 배우고 싶으면 서울로 가야한다는 얘기를 할까?</strong></p>
<p>솔직히 평생 부정하며 살아왔다.
<code>나만 잘하면 되지, 부족하면 유튜브나 질 높은 유료강의들을 통해서 배우면 되지</code> 라며 경험하지 않은 것에 대해 맞다고 생각하고, 회피해왔다.</p>
<p>근데 내가 여기 처음 왔을 때 가장 두려웠고 설렜던 이유는 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/50b7d812-d774-4a6b-a739-b8aafbefbc5c/image.png" alt="">
<a href="https://www.mk.co.kr/news/society/view/2022/07/599174/">출처: 매일경제</a></p>
<p>위 기사를 보면 <strong>&#39;고스펙&#39;</strong> 지원자가 대거 몰렸다는 기사를 볼 수 있다.
실제로도 그랬다. 나는 한낱 지방대의 대학원생일 뿐이었지만, 지원했던 나머지 50명가량의 교육생들은 거의 대부분 상위 1~5위에 있는 대학들이었다.</p>
<blockquote>
<p><strong>너무 두려웠다.</strong></p>
</blockquote>
<p>나도 진심인 만큼 여기 온 사람들도 전부 진심일텐데, 이렇게 뛰어난 사람들 사이에 있으면 나는 아무런 성과도 못내고 꽁무늬만 쫒다 끝나버리는게 아닐까 하고.
팀원들에게는 마지막날에 얘기했지만, <strong>실제로 교육 받다가도 몰래 나가서 눈물을 훔쳤던 때도 있었다.</strong> <em>(엉엉 운건 아닙니다 ㅋㅋ)</em></p>
<p><strong>특히 인공지능 교육을 받을 때</strong>, 나는 정말 너무 어려운데 주변을 둘러보니 다들 너무 잘 따라가는 모습에 자책도 많이했다.
<strong>(인공지능에 대해 교육 해주신 강사님은 모든 학생들이 박수를 칠 정도로 정말 최고의 강의를 해주셨다.)</strong>
나도 그래도 대학원에서 인공지능에 대한 수업도 받아왔고, 졸업논문도 딥러닝분야로 작성하고 있었음에도 어려웠는데..
나를 제외한 모든사람들은 전부 잘 이해하고, 끄덕끄덕하는 모습들을 볼때마다 내 자신이 너무 미웠다.
<strong>그래서 더 간절했고, 부족한 만큼 더 열심히 할 수 있게 되었던 것 같다.</strong>
이때 당시 심리적으로 가장 큰 힘이 됐던건 <strong>지훈님</strong>과 <strong>팀원분들</strong>이었다. 이에 대한 내용은 밑에 편지에 많이 작성하도록 하겠다.</p>
<blockquote>
<p><strong>그리고 너무 설렜다.</strong></p>
</blockquote>
<p>서울에서 교육 받은 사람들의 능력도 너무 궁금했고, 이런 사람들과 함께 프로젝트를 하게 되면 어떨까? 라는 설렘이 정말 강했다.
그리고 뭐든 하나라도 좋은건 더 배워가고 싶었다. <strong>내가 그런사람이 되고싶어서..</strong>
실제로 정말 많이 배웠다. 뛰어난 강사진 분들께도 많이 배웠지만, 내 또래의 교육생들에게도 너무 많은것을 배웠다.</p>
<p><strong>여기까지 글이 길었는데, 정확히 내가 뭘 배웠냐면 커뮤니티의 중요성이다.</strong>
교육을 받으면서도 내가 어려워하고 이해가 안되는 부분들이 있으면 난 항상 주변 교육생들에게 정말 많이 물어봤다.
거의 <strong>물음표 살인마 수준</strong>으로.. <strong>(교육중에 가장 많이 물어봤고, 가장 많이 도와주셨던 우리 팀, 현님에게 매우 감사드립니다.)</strong></p>
<p>이렇게 학사과정에서는 배우기엔 너무 어려운 지식들, 전문성이 있는 지식들을 배우고자 할때, 지방에서는 개발자 커뮤니티가 그렇게 크게 활성화 되어 있지 않아 함께 공부할 사람도 없었고 혼자서 공부하는데에도 한계가 분명했다.</p>
<p>근데 서울에서는 개발자 커뮤니티가 너무 잘 되어있고, 서울 내 지역별로 스터디그룹이 너무나도 잘 되어있는걸 보고 <code>나도 나중에 자식이 생기면 꼭 서울에서 교육받게 하고싶다</code> 라는 생각이 들 정도였다.</p>
<p><strong>2주간 진행했던 해커톤, 팀프로젝트때도 마찬가지였다.</strong>
단언코 얘기할 수 있는데, 내 인생에서 진행했던 팀프로젝트 중 시작부터 끝까지 너무 깔끔했고 개발함에 있어 최상의 결과가 나온건 SKT FLYAI에서 진행한 팀프로젝트다. 이것도 자세한 내용은 아래 편지에 남기도록 하겠다.</p>
<blockquote>
<p>결과적으로 보면 나는 내가 속해있는 열정반에서와, 팀프로젝트 부문에서 받은 두개의 대상을 받게 되었지만
<strong>절대 나는 내 힘으로, 내 능력만으로 인정받은 것이 아니라고 생각한다.</strong></p>
</blockquote>
<p>앞서 말했듯 나는 주변 사람들의 도움을 정말 많이 받았고, 모두가 각기 분야에서 최선을 다했으며, 운 좋게 조금 더 눈에 띄어 대상을 받은 것 뿐이다.
<strong>그럼에도 불구하고 나라는 사람들 좋게 봐주신 <code>교육생분들</code>, <code>강사진분들</code>, <code>SKT 운영진분들</code>께 무한한 감사를 표한다.</strong></p>
<h1 id="감사합니다">감사합니다.</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/e985ec29-7dea-44c3-a8d9-a7c36d4ff537/image.png" alt=""></p>
<p>찾은 사진이 이거밖에 없어서 못올렸습니다. 죄송합니다..
정말 많은 분들이 축하해주셨습니다.
<strong>진심으로 감사했고, 함께해서 영광이었습니다.</strong></p>
<h1 id="skt-운영진분들이-보내주신-사진">SKT 운영진분들이 보내주신 사진</h1>
<p>이 후기를 보시고 운영진분들께서 사진을 추가로 보내주셨다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/5c1dfe7e-104d-44b3-93e1-2b9f0a782e33/image.jpg" alt="">
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 팀프로젝트 대상 발표 순간인데, 우리 팀원 두분 <strong>거의 울면서 껴안으시는 장면 포착</strong> (그 만큼 고생했고, 인정받아서 기뻣다고 해요)</p>
<p><strong>끝 까지 너무 감사합니다 SKT 운영진분들!!!</strong></p>
<h1 id="편지">편지</h1>
<blockquote>
<p><strong>너무나 사랑하고 고마웠던 우리팀, 불사조</strong>
팀원 개개인에 대한 마음은 아래에서 표현하도록 할게요.
8주간 교육받으면서 항상 많은 도움 주셔서 감사합니다. 우리팀분들
남은 2주간 해커톤 진행하면서 여러분들의 능력에 정말 감탄했습니다.
<code>백엔드를 전담해주신 현우님, 딥러닝 모델들을 전담해주신 현님과 예지님, 크롤링을 전담해주신 진경님과 영원님, 특히 영원님은 디자이너의 역할도 해주셨죠.</code>
각자 잘하는 개발분야가 달랐던 것도 행운이었고, 그걸 잘 이용하면서 서로서로 칭찬하며 2주간 하루도 안쉬고 달려와줘서, 2주안에 개발했다고는 상상도 못할 퀄리티를 뽐낼 수 있도록 고생한 팀원분들에게 너무 고맙습니다.
또한, 우리팀원들은 서로 말을 놓지 않았습니다. 너무 친해져서 각자의 선을 넘게될까봐.
끝까지 배려해주셔서, 그리고 팀의 분위기를 항상 화기애애하게 만들어주셔서 감사합니다.
<em>ps. 개발한 프로그램을 최종 시연했을 때 <code>SKT 부사장</code>님이 우리가 만든 어플을 보고 에이닷 개발팀 분들에게 우리가 개발한 기능 검토해보라고 했던 얘기에 우리팀원들은 모두가 함박웃음을 감출 수 없었다. <strong>받을 수 있는 최고의 인정을 받아서..</strong></em>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/e3a6d673-50b1-403e-bae1-5e7d98cc2d0d/image.PNG" alt="">
프로젝트가 종료되고, 우리의 Azure가 삭제될 때는 정말 슬펐습니다.
<strong><em>그래서 개인적으로 가지고 있는 JetsonNano로 24시간 서버를 켜둘 예정..ㅠ</em></strong></p>
</blockquote>
<blockquote>
<p><strong>현님</strong>
저희는 만나고 첫날부터 짝궁으로 옆에 앉아서 같이 교육을 받았는데, 첫 만남이 있던 1주간 단 한마디도 안했을 정도로 서로 어색했던 시간들이 돌이켜 생각해보면 아깝다고 생각드네요.
점점 친해지고 툭툭 던지는 장난스러운 말들이 저는 정말 너무 재미있었고, 제가 모르는 분야에 많은것을 알려주셔서 감사합니다. <strong>그리고 제 블로그에 거의 사생활을 강제로 오픈당하신 분이기도 하죠</strong> ㅋㅋㅋ 죄송하고 감사합니다..
<em>ps. 맹모삼천지교에 대해 얘기가 나왔었는데, 맹자 엄마가 맹자를 위해 뭘 했다는건 기억이 나는데 그 이후가 기억이 안나서 <code>맹자 엄마가 맹자한테 삼천번 학습시켰다...인가요?</code> 라고 하니까 현님이 <strong>무슨 맹자가 <code>EPOCH</code>냐</strong>고 ㅋㅋㅋ 컴퓨터도 3000번 학습시키면 오버피팅 난다고 얘기했던 개발자 개그가 아직도 전 너무 웃기네요</em></p>
</blockquote>
<blockquote>
<p><strong>예지님</strong>
우리팀에서 가장 똑부러지고 함께하는 길에 대한 길잡이 역할을 너무 잘해주셨던 예지님
팀프로젝트 하면서 중간중간 주제와 벗어나는 얘기로 빠질때마다 카리스마있게 잘 잡아주셨던 모습이 정말 멋있었습니다.
정말 엄청난 결과물을 다 내지 못했음에도 대단하다고, 항상 칭찬해주셔서 <strong>제가 뭐라도 된 사람인듯한 느낌</strong>을 정말 많이 받았습니다. 우리 팀원들의 <strong>심리상담가</strong> 역할을 해주셨는데, 그 중 제 자존감도 정말 많이 올려주셔서 감사합니다. 덕분에 제가 보여줄 수 있는 <strong>퍼포먼스의 150%이상</strong>을 보여줄 수 있었던 것 같습니다.</p>
</blockquote>
<blockquote>
<p><strong>현우님</strong>
진짜 <strong>천재</strong>라는 느낌을 가장 많이 받았던 분이 현우님이기도 합니다.
가끔 엉뚱하다고 생각했지만, 그것도 나중에 알고보니 정말 좋은 선택이었다는걸 알게 해줬던 현우님.
<em>(진짜 천재들은 이렇게도 생각할 수 있구나.. 하며 많이 배웠습니다.)</em>
개발능력 부문에서도 최상의 역할을 해 주셨고, 제가 이번에 앱 개발을 하면서 이렇게 편하게 개발해봤던 적은 처음이었습니다.
<strong>그리고 교육 외 시간에도 공부한다고 제일 오래남아계셨고, 유일하게 우리팀에서 개근상을 받은 분이기도 하죠.</strong>
노력 + 재능 + 성실한 모습을 보면서 개발자로서 정말 많이 배웠습니다. 항상 감사했습니다.
<em>ps. ㅋㅋㅋㅋ 제가 했던 잊을수 없던 재밌는 말은 잊어주세요...!!ㅋㅋㅋㅋㅋㅋ</em></p>
</blockquote>
<blockquote>
<p><strong>진경님</strong>
팀프로젝트가 시작된 직후 진경님이 <strong>30분만에 유의미한 결과</strong>를 내시면서 <code>우리팀의 아이디어가 가능성이 있다</code>라는 것을 증명함으로 저희 프로젝트는 시작됐죠.
여러 프로젝트들을 진행하면서 항상 설계하고 고민하느라 보내는 시간들이 많았는데, 진경님을 보고 크게 배운건 <code>말만 하는 것 보다, 일단 결과로 증명하는 것</code>이었습니다.
정말 서로가 주어진 환경에서 진경님은 항상 묵묵하게 가장빨리 결과를 내주시고, 문제가 생기면 순식간에 디버깅 하면서 해결해 나가는 모습에 너무 든든했습니다.
그리고 가장 반응이 좋은분이셨습니다. 어떤 말을 해도 항상 웃어주시고 조용히 <strong>따봉을 날려주시던</strong> 진경님 덕에 재미도없는 아재개그도 수십번 하고<del>(어... 이렇게 생각해보니 죄송하네요.. ㅎㅎ;;)</del> 항상 감사했습니다 : )</p>
</blockquote>
<blockquote>
<p><strong>영원님</strong>
취미로 그림을 그렸다던 영원님. 앱 개발자를 메인으로 꿈꿨을때 가장 가지고싶었던 재능이었습니다.
맨날 우리팀원들이 PPT 개판으로 만들어놓으면 영원님의 손을 거쳐 엄청나게 예뻐지는 마법을 보고 우리 팀원들은 영원님을 <code>안드로이드 스튜디오 마법봉</code>이라고 부르기 시작했죠. (<strong>안드로이드 스튜디오에 마법봉을 누르면 Layout이 자동으로 예쁘게 정렬되는 기능이 있다.</strong>)
개발능력도 뛰어나면서 디자인감각까지 가지고계셔서 저희 팀이 앞으로 진행될 결과들을 미리보기식으로 매일매일 보여주시고, 캐릭터들도 직접 그려주셔서 팀 프로젝트의 퀄리티가 <strong>500%</strong>는 올라갔다고 생각이 듭니다.
해피바이러스였던 영원님! 항상 감사했습니다!
<em>ps. 9주차까지 나는 영원님 본명이 원영님인줄 알았다. <strong>나는 팀장 자격 실격이다.ㅜㅜ</strong></em></p>
</blockquote>
<blockquote>
<p><strong>영우님</strong>
서 tothe 영 tothe 우님!
우리 SKT FLYAI 과정의 시작과 끝을 전부 영상으로 담아주시고, 편집해주신 PD님이다.
워크숍때 많이 친해지면서 개인적으로 연락을 주고받는 사이까지 되어 너무 영광입니다.
거의 명예 4조(우리조)라는 얘기가 나올정도로 저희팀과 접점이 많았어서 좋았고, 항상 신경 많이 써주시는 모습에 감사했습니다.</p>
</blockquote>
<blockquote>
<p><strong>지수님</strong>
SKT FLYAI 첫 회식날 제가 블로그쓰는걸 알아봐주시며 다른 팀이었음에도 정말 친근하게 다가와주셨던, 그리고 꾸준히 사진 많이찍어주시면서 블로그에 올리라고 도움주셨던 친화력 갑 지수님.
교육과정 끝나기 2주전까지는 블로그쓰는사람이 지수님이랑 저밖에 없는줄알고 매일 지수님 블로그에 들어가서 구경했습니다 ㅋㅋ 블로그를 사실적으로 굉장히 재밌게 작성하시는 분 : )
다른 팀이었음에도 잘 챙겨주셔서, 정말 감사했습니다.</p>
</blockquote>
<blockquote>
<p><strong>열정 2조 PM 지훈님</strong>
SKT FLYAI 1기에는 나를 포함해 흡연자가 4명밖에 없었다.
담배친구로 가장 먼저 친해진건 지훈님 ㅋㅋㅋ 교육과정 끝나고도 꾸준히 연락하는 몇 안되는 분들 중 한분!
이미 인공지능쪽으로 인턴도 다녀오셨고, 정말 굉장한 능력을 가지고 계신분이 도대체 여기 왜왔나... 저희 다 짓누르려고 왔나 생각했습니다..
교육받고 쉬는시간마다 함께 나가며 서로 이해안되는 부분, 잘 되는부분에 대해 공유하며 서로가 부족한점을 채워나갔던 최고의 동료 아니, 솔직히 제가 지훈님께 배운게 훨씬 많았으니 최고의 멘토였습니다.
10주간 SKT FLYAI 진행하면서 가장 많이 소통했던 건 지훈님과의 시간들이었던 것 같아요.
항상 응원해주시고, 함께 위로 올라가자고 같이 으쌰으쌰해주셔서 너무너무 감사했습니다.
<em>ps. 팀프로젝트 최우수상 축하드립니다!!</em></p>
</blockquote>
<blockquote>
<p><strong>열정 1조 팀장 지후님</strong>
같은학교 동문이자, 다른 팀의 팀장을 맡고계셨던 해피바이러스 지후님.
ㅋㅋㅋ 지후님과는 SKT FLYAI 면접보고나서 <code>에브리타임</code>으로 먼저 알게 된 사이다.
항상 약간만 웃겨도 왘왘왘 웃어주시며 팀 분위기를 해피해피하게 만드시는 모습 보고 <code>참리더</code>라고 생각했습니다.
함께해서 너무 좋았고, 개학 했으니 학교에서 자주봐요 : )</p>
</blockquote>
<blockquote>
<p><strong>패기 2조 팀장 주언이</strong>
SKT FLYAI 교육과정을 진행하며 SKT 워크숍에서 잠시 같은 팀이었던 주언이.
SKT FLYAI 교육생들중에 말을 놓은 건 주언이밖에 없다.
먼저 다가와주고, 편하게 대해줘서 말 놓을수 있었던 것 같아. 수상 이후에 따로 카톡으로 장문으로 축하한다는 메세지 보고 정말 고마워서 눈물 흘릴 뻔한건... ㅇrㄴl..?ㅋㅋㅋ
패기반과 열정반으로 나뉜 우리는 같이 교육은 받지 못했지만, 항상 서로 각자를 응원해서 좋았던 것 같아.
기회가 되면 함께 해보고 싶다 주언아!
<em>ps. 팀원인 단비님께 패기반 대상 축하드린다고 전해줘 ㅎㅎㅎㅎ</em></p>
</blockquote>
<blockquote>
<p><strong>열정 3조 팀장 경수</strong>
내 연구실 동료이자, 그 동안 나의 개발능력을 바로 옆에서 가장 많이 키울 수 있도록 도와준 친구.
처음 연구실에 들어왔던 3년전부터 지금까지 정말 많이 알려줘서, 어려운 문제를 함께 풀어나갈 수 있도록 도와줘서 고마워.
(솔직히 지금 연구실 옆자리에 있는데 이렇게 편지쓰는건 진짜 낯간지럽다)
경수 덕분에 내가 프로그래밍 기술이 정말 많이 늘었던 것도 사실이고, 그 동안 혼자하기 두려운 프로젝트에서 <code>나만 믿어, 뭔가 버그 생기면 내가 잡아줄게</code>라며 든든하게 항상 밀어줬던 친구.
덕분에 정말 빠른시간안에 성장할 수 있었고, 지금의 내가 되었다고 봐.
항상 고맙고, 졸업까지 벌써 반년 밖에 안남았네.. 우리 석사 졸업조건은 채웠으니 조금만 더 힘내보자 파이팅!</p>
</blockquote>
<blockquote>
<p><strong>SKT 운영진분들</strong>
항상 늦게까지 고생하시던 매니저님들과, 저희에 대해서 항상 궁금하셧고, 관심 많이 가져주시던 부장님.
평균나이 20대 중반의 사람들이 모인 아카데미에서 <code>9to6</code>로 교육을 듣기란 쉽지 않은 일임을 너무도 잘 이해해주시고, 혹시 교육받는 교육생들이 피곤하진 않을까 개인 사비로 비타민도 개개인 모두에게 사주시고, 커피를 먹을 수 있는 쿠폰도 자주 주시던 운영진분들.. 
<strong>한 곳에서만 교육을 듣기엔 너무 힘들지 않을까?</strong> 라는 생각을 먼저 가져주시며, SKT 임직원 분들이 가는 워크숍을 저희도 경험할 수 있게 해주시고, 항상 더 좋은 환경에서 교육받을 수 있도록 매일 신경써주심에 정말 감사했습니다.
<em>ps. 솔직히 말해서 저희는 인턴도 아니고, 아카데미 교육생일 뿐이었지만 그런걸 구분하지 않고 쉽게 경험할 수 없는 대기업 문화를 경험할 수 있게 해주셔서 정말 많은 것을 배울 수 있었습니다. 정말 감사했습니다.</em></p>
</blockquote>
<blockquote>
<p><strong>SKT 보라매사옥 1층 카페 사장님</strong>
10주간 정말 예뻐해주시고, 열심히 한다고 샌드위치, 빵, 쿠키를 아낌없이 주심에 정말 감사드렸습니다.
사실 제일 힘낼 수 있었던 원동력은 카페 사장님 덕분이 아닌가 생각이 들 정도입니다.
항상 감사드리며, 서울로 상경하게되면 꼭 찾아 뵈고 다시한번 인사드리도록 하겠습니다!!</p>
</blockquote>
<blockquote>
<p><strong>SKT 현업 개발자이자, 나의 선배 헌주형</strong>
대학교에 복학 후 첫 대형프로젝트를 함께했던, 당시 팀장이었던 헌주형.
아무것도 모르던 제게 협업을 위해 <code>Github</code>도 알려주시고 항상 잘하고있다, 꾸준히 더 잘 하면 된다, 넌 잘할거야. 라며 프로젝트를 할때도, 멀리 있을때도 항상 응원해주시고 지금도 자주 밥 사주시며 성공한 선배의 위엄을 제대로 보여주시는 선배님. SSAFY와 SKT FLYAI를 고민하고 있을 때 가장 결정적으로 도움을 주셨던 선배님이 헌주형입니다.
SK 문화에 대해서도 많이 알려주시고, 앞으로의 인생고민에 있어서도 가장 많이 상담했어서 귀찮을법도 한데 바쁜 와중에도 항상 시간내서 만나주셔서 너무 감사합니다. 그 동안의 학사생활도, 앞으로의 인생에서도 제 롤모델이십니다. SKT FLYAI에서 수상했다고 연락드렸을 때에는 자기 일처럼 기뻐해주셨고, 당연히 너라서 수상 할 줄 알았다 라며 칭찬을 아끼지 않았던 형님.
항상 감사했고, 앞으로도 미리 감사드립니다. 사랑합니다 형님!!</p>
</blockquote>
<blockquote>
<p><strong>NAVER 현업 개발자이자, 나의 선배 성찬이형</strong>
마찬가지로 대학교 복학 후 첫 대형프로젝트에서 헌주형과 함께 처음 만났던 성찬이형. 당시 실제 앱 개발 부문에서 항상 가이드라인을 주셨고, 코드에 문제가 있으면 왜 잘못되었는지 낱낱이 알려주시며 내 개발능력을 꾸준히 키워갈 수 있도록 진지하게 현실적으로 멘토의 역할을 멋지게 해주셨던 성찬이형.
사실 제가 프로그래밍에 더 큰 관심을 갖게된 것도, 연구실에 들어와서 더 배울 수 있도록 기초를 탄탄하게 잡아주신 분이 성찬이형입니다.
이전 게시물에도 먼저 연락드리지 못했음에도 댓글남겨주시며 축하한다고 남겨주셔서 너무 감사했습니다.
서울로 상경하게되면 가장먼저 연락드리도록 하겠습니다. 항상 지켜봐주시고 응원해주셔서 감사합니다!!!</p>
</blockquote>
<blockquote>
<p><strong>그 외 모든분들..</strong>
모든 분께 감사하다는 말을 한분 한분 드리지 못해 죄송합니다.
축하해주셨던 분들이 너무 많아 미처 다 작성하지 못했습니다.
같은 팀이 아님에도 항상 응원해주셨던 분들께 정말 감사드리며,
<strong>앞으로의 앞길에 하고자하는 모든것을 이루시길 응원하겠습니다.</strong></p>
</blockquote>
<h1 id="skt-flyai-과정을-블로그에-담고-계신분들">SKT FLYAI 과정을 블로그에 담고 계신분들</h1>
<h2 id="열정-1조-박지후님">열정 1조 박지후님</h2>
<p><a href="https://m.blog.naver.com/wlgnaos/222866854376">Naver Link</a></p>
<h2 id="열정-1조-김지수님">열정 1조 김지수님</h2>
<p><a href="https://m.blog.naver.com/PostList.naver?blogId=wltnwhgdkgo">Naver Link</a></p>
<h2 id="열정-2조-김성겸님">열정 2조 김성겸님</h2>
<p><a href="https://velog.io/@ksk0605/SKT-FLYAI-Challenger-1%EA%B8%B0-%ED%95%A9%EA%B2%A9%ED%9B%84%EA%B8%B0">Velog Link</a></p>
<h2 id="열정-4조-이현우님">열정 4조 이현우님</h2>
<p><a href="https://velog.io/@hyunooss/SKT-FLYAI-%ED%9B%84%EA%B8%B0">Velog Link</a></p>
<h2 id="패기-2조-임단비님">패기 2조 임단비님</h2>
<p><a href="https://velog.io/@danbibibi/b7sttp20">Velog Link</a></p>
<p>블로그 작성하신 분들이 더 있을 것 같은데 제가 모르는 분들이 있을 것 같습니다. 댓글 남겨주시면 추가할게요!
또한, 혹시 공개되는게 꺼려진다면 연락 바랍니다:) 조용히 슥샥쇽 할게요ㅎㅎ..</p>
<h1 id="10주-400시간동안-함께해서-영광이었습니다">10주, 400시간동안 함께해서 영광이었습니다.</h1>
<p>혹시 저를 또 뵙고싶다면 9월16일에 있는 취업컨설팅 때 또 봐요 :)</p>
<blockquote>
<p><strong>2차, 3차 후기들도 아마 올라갈 것 같다.</strong></p>
</blockquote>
<p>2차는 <strong>우수수료생에 대한 특혜</strong> <em>(일단 SKT 운영진분들께 올려도 되냐고 물어보고..)</em>
3차는 <strong>팀원들과 9월 말에 강사님중 한분을 뵈러 부산으로 내려가기로 해서, 그에 대한 내용을 작성 할 예정이다.</strong></p>
<p><em>진짜 안녕, SKT FLYAI 1기</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI [9주차, 10주차] 그리고.. 대상]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-9%EC%A3%BC%EC%B0%A8-10%EC%A3%BC%EC%B0%A8-%EA%B7%B8%EB%A6%AC%EA%B3%A0..-%EB%8C%80%EC%83%81</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-9%EC%A3%BC%EC%B0%A8-10%EC%A3%BC%EC%B0%A8-%EA%B7%B8%EB%A6%AC%EA%B3%A0..-%EB%8C%80%EC%83%81</guid>
            <pubDate>Tue, 06 Sep 2022 08:53:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>9주차와 10주차를 한번에 쓰는 이유는 2주간 각자의 아이디어를 해커톤을 진행하여 결과물을 내야하는 시간들이었기 때문에 사실상 촉박한 시간에 개발하느라 시간이 어떻게 가는지도 몰라서, 언제 어떤 사진을 찍었는지도 기억이 안나서 한번에 작성한다.</strong></p>
</blockquote>
<h1 id="개발과정">개발과정</h1>
<p>2주간 해커톤은 기존 <code>SKT 보라매사옥</code>에서 진행하거나, <code>SK T타워</code>에서 진행하거나 두 가지 선택지가 있었다.
우리가 앞으로 언제 또 T타워를 가보나 하고 우리는 2주동안 SK T타워에서 진행하기로 했다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/7cec9c83-3b19-441b-9bd7-cfc9daa2fe43/image.png" alt="">
아, 나는 SKT 보라매사옥 1층에 있는 카페 사장님과 인스타그램 팔로우가 되어있다. <strong>(절대 맹세코 뒷광고 아님)</strong>
매일 아침과 점심에 여기 카페에서 커피를 사먹었는데(진짜 맛있어서), 항상 열심히하는 모습이 너무 이쁘다며 전매특허인 <code>콩빵</code>과 <code>쿠키</code>를 정말 많이 주셨다.
정확히 계산해보지않아 확실하지 않기 때문에 MSG를 약간 첨가해서 말하면, 금전적으로는 총 20만원 이상의 간식거리를 매일매일 챙겨주시면서 힘내라고 응원해주셨다.</p>
<p>이런 은혜도 모르고 마지막날 SKT 보라매사옥에서 저녁먹고 아무 생각없이 인스타그램에 스토리를 올렸다가 <strong>심장이 철렁했다.</strong>
시작부터 끝까지 응원해주시는 사장님에게 <strong>무한한 감사함</strong>과, 8주간 매일 카페에 갔으면서 2주간 못 보는걸 가장 먼저 말씀 못 드렸다는 사실에 <strong>죄송함</strong>이 함께 공존했었기 때문..</p>
<p><strong>이렇게 나는 2주간 보라매사옥을 떠나게 되었다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/850855b9-48dd-44a4-82ee-56d93c1210fd/image.png" alt="">
맨 처음 SKT FLYAI 교육과정에 신청했을 때, 면접보러 왔던 T타워에 다시오게 될거라곤 생각도 못했다.
이게 지하2층의 뷰라고 누가 생각하겠는가.. 2주 내내 너무 예쁜 풍경에 너무나 오고싶은 회사라고 팀원들하고 계속 얘기했던 기억들이 지나간다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/75fc49f9-bdb6-4834-bde9-2459482c998e/image.png" alt="">
처음 코딩테스트 면접을 봤던 회의실.
여기도 다시 올거라곤 생각도 못했는데 정말 엄청난 시설들이었다.
여기서 회의하면 없던 아이디어도 떠오를 것 같았다. <strong>(실제로도 그랬다)</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/99addc90-5dba-4356-8cce-bf23c6346c22/image.JPG" alt="">
우리 아이디어는 SKT에서 개발한 <code>에이닷</code>이라는 어플에 추가 기능을 제안하는 것 이었다.
우리는 전부 개발자이기 때문에 UI/UX에 대해선 전무해서, 되려 우리딴에 꾸미려고 했다가 우리의 주제를 해치지 않도록 실제 <code>에이닷</code>어플의 UI/UX를 100% 카피했다.</p>
<ul>
<li>여기서 UI/UX 100% 카피는, 실제 어플 내 버튼들, 화면 전환 애니메이션 모든것들을 똑같이 카피했음을 말한다.
   실제로 <code>서버</code>, <code>모델</code>, <code>크롤링</code>등의 코드를 제외하고도 <strong>어플리케이션 개발에 들어간 코드는 <code>총 4,000줄</code>이 넘는다.</strong></li>
</ul>
<p>절대 헛점을 보여주고 싶지 않았고, 실제로 우리의 아이디어를 적용시켰을 때 어떤 결과가 나올지를 미리보기처럼 보여주고 싶었다.
그리고 2주라는 시간안에 개발함에도 최상의 퀄리티를 고집했기 때문에 우리팀은 2주간 <strong>단 하루도 쉬지않고</strong> 모든 날을 개발에 시간을 쏟았다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/d00e4912-8aa5-4e93-9432-536eae9af7aa/image.JPG" alt="">
우리팀에 디자이너가 숨어있었다.
개발도 잘하는데 취미로 디자인을 했다기엔 너무나 퀄리티 높은 모습에 자주 부려먹었다.<strong>(죄송합니다 ㅎ.. 진짜 영원님이 너무 잘해서 그런거 알죠?)</strong></p>
<p>저 위에 사진은 우리가 개발할 때 들어갔던 캐릭터들을 전부 스티커로 주문해서 평생 추억으로 남을 수 있게 해주셨다.
<strong>난 저 스티커를 받자마자 하던 개발을 멈추고 바로 근처 다이소로 뛰어가 반영구보존을 위해 보호필름을 사러갔다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/99b10472-7a62-4ca8-9370-7b42154710bf/image.png" alt="">
정말 하루종일 회의실에 박혀 개발만 하다보니 목이 거북목이 되다못해 ㄱ자 목이 될 뻔했다.
그래서 우리팀은 항상 점심먹고나서 소화도 시킬겸 짧게 산책을 다녀왔다.
<strong>걷는걸 정말 귀찮아하는 나를 강제로라도 끌고나가며 좋은 풍경을 볼 수 있게도, 쉴 시간도 준 팀원들에게 너무 고마웠다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a70904e1-925b-425c-8e94-cb0104fe4fd4/image.png" alt="">
아, 이 얘기를 빼먹었다.
우리는 매일 아침 각자 간식과 김밥을 사와서 당 충전을 하며 개발했다.
<strong>아침에 원래 밥을 잘 안먹는 나도 이제는 아침을 좀 챙겨먹는 사람이 되며 건강에 좀 다가가는 느낌을 받았다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/8c11167c-973b-473f-ac7a-cb606415c69f/image.png" alt="">
이 얘기도 빠질 수 없다. 아니 무조건 해야한다. SK T타워에서 먹는 밥은 매일매일이 최상의 퀄리티다.
당연히 아무나 먹을 수 없고, SKT 임직원들만 먹을 수 있는데 SKT 운영진분들 중 부장님께서 <code>개인 사비</code>로 식권도 사주시고, 맛있는 밥 잘 챙겨먹을 수 있게 힘써주셔서 2주간 개발하는 내내 너무 감사했었다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/d3695315-c4fd-414b-9b93-6580f7bbcf66/image.png" alt="">
주말에도 원격으로 개발하던 우리팀.
힘들때 쯤 팀원분중 한분이 반려묘를 보여주시며 힐링시간을 갖기도 했다. <strong>(심바야 사랑해)</strong></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/74863187-7bc6-422e-82ae-c92f0adb5db1/image.png" alt="">
그렇게 우여곡절 끝에 총 개발기간 10일에 걸쳐 결과물이 나왔다.
이거 말고도 더 있는데, <a href="https://github.com/SKT-Phoenix/Phoenix">Phoenix Github</a> 여기 링크에 들어가면 1분짜리 예제 영상을 담아두었으니 보면 될 듯 합니다!</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a2f42342-57a8-481c-ba29-163eba289f78/image.png" alt="">
얼마나 열심히 했는지는 Commit이력만 봐도 알 수 있다.
10일간 <code>240회 이상</code>의 커밋이 오고갔다.
<strong>(중간에 강제 Push 한번 했다가 이력 다 날아갈 뻔했다. ㅎㄷㄷ)</strong></p>
<h1 id="수료식">수료식</h1>
<p>모든 교육과정이 끝나고 대망의 수료식 날이 다가왔다.
우리가 개발한 모든것을 보여줘야하고, 실제로 <code>SKT 부사장</code>님도 시연할 때 오신다고 하셔서 엄청나게 떨렸다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/0d4d2fc9-3279-4070-82ca-23cf7a176e2d/image.png" alt="">
긴장감을 덜어내려 괜시리 폼도 잡아보고..ㅋ 우리가 개발한 내용을 실제로 시연할 때는 더욱 떨렸던 것 같다.
다행히도 많이 긴장한 나와는 다르게, 우리 팀원들은 말을 능수능란하게 잘 해서 정말 너무 고마웠다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/27d7e43e-5fac-43c8-8778-dc72521a367f/image.png" alt="">
최종발표 전, 수료식 포토존에서 팀원들과 한컷!</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/96b5c7f2-c022-4cf2-aff8-00dc6432fc68/image.png" alt="">
최종발표 직전, 발표 리허설을 하는데 정말 한순간도 긴장이 안풀렸다.
이 글을 쓰고있는 현재에도 이 사진만 보면 심장이 두근두근하다..</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/132321e2-b2b1-4107-a40f-988bb337f990/image.png" alt="">
<strong>최종발표!</strong>
우리는 총 8개의 팀 중에 7번째로 발표를 했다. 앞에 발표한 6개의 팀이 너무 발표를 잘해서 거의 울기 직전이었다.. ㅠㅠ
물론 당연히 우리 뒤에 발표하는 팀도 굉장히 준비를 많이 해오셨고, 최고의 발표를 진행하셨다..</p>
<p>결과는..?</p>
<h1 id="수상식">수상식</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/e188a324-c302-4625-bd11-219ab682322d/image.JPG" alt="">
<strong>SKT FLYAI는 열정반/패기반으로 나눠 수업한다.</strong>
이 중, 나는 열정반에서 <code>대상</code>을 받았다.
정말 이 교육과정동안 모든걸 바쳤고, 그에 대한 인정을 받은 것 같아 수상소감을 말할 때 눈물이 너무 나서 수상소감을 도저히 말 할 수가 없었다.
못다한 얘기는 다음 게시물인 <strong>후기</strong>에서 길게 말하도록 하겠다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a7c7098d-e233-416a-ad04-7bcb47fd85ab/image.JPG" alt="">
또한, 해커톤(팀프로젝트)부문에서도 우리팀은 <code>대상</code>을 받았다.
팀원들의 허락을 받아 모자이크없이 게시한다. <strong>(이럴거면 그동안 모자이크 왜 했지?........)</strong>
이 또한 못다한 얘기는 다음 게시물에서 굉장히 많이 얘기 할 예정이다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/ffef68c7-1782-4e57-bfbe-016409bdb390/image.png" alt="">
좋게봐주셔서, 많은걸 배울 수 있는 기회를 주신 <code>SKT 운영진 분들</code>께 정말 감사합니다.</p>
<h1 id="회식">회식</h1>
<blockquote>
<p><strong>나는 절대 혼자 힘으로 개인, 팀 부문에서 대상을 받은게 아니다.</strong></p>
</blockquote>
<p>그래서 팀 부문에서 <strong>대상</strong>을 받은 상금은 각자 분배하기로 하고, 개인 부문에서 받은 상금으로 1차 회식에서 돈 걱정 없이 팀원들과 소고기와 삼겹살을 먹었다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/e853ef24-c583-4ab9-a56a-2c75cf45df11/image.png" alt="">
위 사진은 <code>월화고기</code>라고, SKT 보라매사옥 바로 옆에있는 고기집이다.
먹거리 X파일에도 나왔었고 너무 궁금해서 와봤다. <strong>(SKT 운영진분들이 수료식 이후 우리 회식하는 모습을 보셨다고..!ㅋㅋㅋ)</strong>
<code>물론 정말 맛있었다. 계속 감탄하면서 먹었다..</code></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/15e2378f-83c2-443e-b5be-c3bf1642e8e0/image.png" alt="">
2차로는 내 이름이 가게이름과 같아서 팀원분들이 같이 가자고 하셔서 간 <code>이자카야 찬</code>
그리고 3차로 비어킹을 간 후, 천안으로 가는 KTX 막차시간이 다가와 아쉽게 헤어지게 되었다.</p>
<p><strong>어차피 우리는 다시 만나게 될꺼니까</strong></p>
<p><em>나머지 이야기는 다음 게시물에서 엄청나게 많은 이야기를 할 예정이고, 감사했던 분들에게 각각 편지를 남길 예정이니 다음 게시물로 넘어와주세요!</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI 1기 [8주차]]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-8%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-8%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Tue, 06 Sep 2022 07:13:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>너무 많은 일이 있어 그동안 작성하지 못한 글들을 오늘 8주차, 9주차, 10주차, 후기까지 전부 작성하려고 한다.</strong></p>
</blockquote>
<h1 id="50일차">50일차</h1>
<p>8/15 광복절이었지만, 이전에 하루 빠진 수업을 보강하기 위해 휴일없이 수업을 진행하게 되었다.
이 교육과정이 2개월안에 많은것을 배우고 활용해야하는 교육과정이기 때문에 그런 것 같다.</p>
<p>나도 마찬가지지만, 여기 온 사람들은 하루하루 더 많은것을 배우고 가고 싶었기 때문에 어느 누구도 휴일에 수업을 한다고 싫어하는 사람은 없던 것 같다.</p>
<p>여튼 50일차 수업은 <code>JetsonNano</code>를 사용한 수업!
<img src="https://velog.velcdn.com/images/kc0584-dev/post/dfd265c4-03a9-40df-aafb-82fc39bc90a0/image.JPG" alt="">
라즈베리파이같은 초소형컴퓨터는 대학교에서 졸업프로젝트로 다들 많이 사용해 봤을거다.
JetsonNano도 비슷한건데, CUDA가 포함되어있어 초소형 컴퓨터에서도 딥러닝 모델을 넣어 학습시키고, 예측값을 볼 수 있는 보드이다.<em>(물론 데스크톱 GPU성능을 따라갈 순 없다.)</em></p>
<p>나는 우리 연구실에서 여러 초소형 보드들로 테스트하는 연구를 진행한 적이 있어 사용해본 경험이 있어 어렵지않게 따라갈 수 있었다.</p>
<p>이 날엔 JetsonNano에 RNN, LSTM등 여러 딥러닝 모델들을 넣어 결과를 보는 실습등을 진행했다.</p>
<h1 id="51일차">51일차</h1>
<p>JetsonNano를 활용해서 여러 인공지능 튜토리얼을 마치면 얻을 수 있는 NVIDIA의 자격증이 있다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/00f30856-e323-4025-80f3-fe8defdf01c2/image.png" alt=""></p>
<p>이 날엔 이 자격증을 따기 위한 수업을 진행했다.
아무나 가지고있는 자격증이 아니기 때문에 더 특별했던 경험인 것 같고, 교육을 들으면서도 즐겁게 인공지능 교육을 받을 수 있었다.</p>
<h1 id="52일차">52일차</h1>
<p>오랜만에 MicroSoft MVP 겸 유튜버<em>ㅋㅋ</em>인 강사님이 돌아오셨다.
오신 이유는 MicroSoft AI-900 자격증을 취득할 수 있도록 다시한번 Azure와 ML/DL을 다시 공부하는 시간들을 가지기 위해서..
시험 4일전 미리 수업을 듣고 각자 공부해서 이 주 토요일에 시험을 봤다.
자세한 내용은 55일차에!</p>
<h1 id="53일차--54일차">53일차 ~ 54일차</h1>
<p><code>C#</code>과 <code>Azure</code>를 함께 배우며 챗봇을 개발 해 보는 시간을 가졌다.
심심이와 같은 프로그램을 개발 해 보는 시간이었는데, 직접 개발해보니, 전공지식이 없는 사람들도 Azure를 사용하면 쉽게 개발해 볼 수 있을거라고 생각이 들었다.</p>
<h2 id="미래공작소유튜브-촬영">미래공작소(유튜브) 촬영</h2>
<p><a href="https://www.youtube.com/channel/UCwdj30TSf8pcDFrBNyTPdUg">미래공작소 유튜브 링크</a>
이 게시글을 올린 당시에는 아직 게시물이 업로드 되지는 않았다.
개그맨 송준근님이 오셨다는 얘기도 당일에 들었고, 실제로 교육듣다 쉬는시간에 나가보니 송준근님이 있어서
호다다닥 달려가서 사진찍어달라고했다.<strong>(태어나서 연예인 실물 처음 봄)</strong>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/7255caa2-e9f3-4700-908b-8b03a7cf3434/image.png" alt="">
종이가 없어서 싸인을 아이패드에 받았다 ㅋㅋㅋㅋㅋ ㅠㅠ(송준근님 허락받고 올립니다!)</p>
<ul>
<li>참, 이 사진은 같이 교육받는 수강생 중 <strong>지수</strong>님이 찍어주셨다. <strong>감사합니다</strong><ul>
<li>이 분은 블로그 맛깔나게 쓰시니 <a href="https://m.blog.naver.com/wltnwhgdkgo">링크</a> 쇽!</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/d3f12a72-3f49-4a62-9a41-0196243daa9e/image.PNG" alt="">
SKT FLYAI 하면서 여기저기 쏘다니기 1등이라서 그런지 팀원분도 나한테 뽕 다뽑고 간다고ㅋㅋ</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/95e563a5-9be2-4199-bfaa-823c97509200/image.png" alt="">
팀원들하고도 다같이 한장!</p>
<h1 id="55일차">55일차</h1>
<p>원래 가족들이랑 가족여행 일정에 있던 토요일이었는데, 이 날 MicroSoft AI-900 자격증 시험을 봐야해서 어쩔 수 없이 가지 못했다..
근데 후회는 안한다! 이번 교육과정 다 끝나고 가족들이랑 놀러가기로 약속했으니까 :)</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/1bef8de1-d62f-40c3-af85-8b34a916e802/image.png" alt="">
결국 자격증 취득 완료!
진짜 시험 시작하자마자 배가 너무 아파서 집중을 하나도 못하고 풀었기 때문에 떨어질까봐 걱정 엄청했는데 간신히 턱걸이로 통과했다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/f80e5672-62c9-4798-a722-89f06b6d4cb2/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/95b8f688-f5bf-4f0d-b74d-367b342094cb/image.png" alt="">
40명이 넘는 인원수가 한번에 시험을 봤는데 전원합격 ㄷㄷ 역시 이 과정에 온 사람들은 다 똑똑해..</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/8c441a3a-8473-421a-b39c-11a57636db5b/image.png" alt="">
팀원들과 한컷!</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a004cf7a-4939-4453-b2e9-1c8b5615e311/image.JPG" alt="">
약한 비가 졸졸 와서 캐리백으로 가리고 버스타러가는데 찍어주신 팀원분들 ㅋㅋㅋ ㅠ</p>
<p><strong>이번주도 알찬 하루였다!</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI 1기 [7주차]]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-7%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-7%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Thu, 18 Aug 2022 12:29:20 GMT</pubDate>
            <description><![CDATA[<h1 id="43일차">43일차</h1>
<p>MicroSoft Azure 강의의 마지막날.
어디가서 Cloud Service에 대해 배울 수 있는 기회가 주어질까?</p>
<p>항상 배우고 싶었던 기술을 배우는건 너무 즐겁고 내 자신에 대한 자부심을 가지게 해준다.<del>(새로운 지식을 얻었다고 자만하지는 말자)</del></p>
<p>Docker랑 Kubernetes의 구조가 처음엔 정말 이해가 안됐는데, 강사님께 이해 될때까지 여쭤봤다. Azure 수업의 마지막날이라 정말 아쉽고 즐거운 시간들이었다.</p>
<h1 id="44일차결석">44일차[결석]</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/ab1ae2e1-4781-4f11-8d35-5dc3006379ff/image.JPG" alt="">
하... 안그래도 <code>천안 &lt;-&gt; 서울</code>을 왔다갔다하는데 역대급 호우가 몰아쳤다.
수업 끝나자마자 바로 집에 갔으면 금방 갈 수 있었는데, 이 날 따라 왠지 공부가 더 하고싶어서 자습하다 KTX를 타러왔다....</p>
<blockquote>
<p>자습의 결과는 <strong>서울에서 저녁 8시에 출발</strong>했는데 <strong>천안에 새벽1시</strong>에 도착했다.
5시간동안 KTX에 갇혀있으니 좀이 쑤시더라...</p>
</blockquote>
<p>팀원들 중 버스를 탄 팀원의 버스는 <code>침수</code>되고, 지하철을 탄 팀원도 갇혔었다.</p>
<p>다음날에 서울에는 비가 좀 그쳤는데, 천안에서 폭우가 이어져서 <strong>기약없는 KTX 운행지연</strong>으로 인해 아예 가지도 못했다... <strong>RNN 배우는 날</strong>이었는데 하...ㅠㅠㅠㅠ</p>
<h1 id="45일차">45일차</h1>
<p>어제에 이어 RNN수업을 이어서 했다.
나는 어제 수업을 듣지 못해 팀원들과 친해진 다른 팀원분들에게 어제 진행한 코드를 받았고<strong>(정말 감사합니다)</strong> 그 코드에 이어서 수업을 들었다.
근데 이제 어느정도 이해는 했는데 누군가한테 설명할 정도는 아니라서, 내가 더 공부하고 따로 블로그에 정리하려한다.</p>
<h1 id="46일차">46일차</h1>
<p><code>CNN/RNN</code>을 이용한 수업을 진행하고 수업 막바지엔 <code>DACON</code>을 진행하며 실제 내 모델의 성능을 평가 해볼 수 있는 시간들을 보냈다.</p>
<p>아, 그리고 <code>MediaPipe</code>에서 제공하는 Pretrained 된 모델인 <code>Hand Gesture Model</code>에 전이학습을 하기도 했는데, 진짜 재밌고 신기했다.</p>
<blockquote>
<p><strong>결과</strong>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/d4d7078f-c13f-4016-a33e-9cec9e5ba25d/image.png" alt=""></p>
</blockquote>
<ul>
<li>원래 부분 모자이크 하던 사이트의 서버가 이상해져서 다른데에서 블러처리를 했는데 너무 저퀄리티가 됐다... 나중에 내가 따로 다시 만들어봐야겠다..</li>
</ul>
<h1 id="47일차">47일차</h1>
<p><strong>Object Detection</strong><em>(YOLOv5)</em>을 이용해서 자동차, 사람, 마스크씀/안씀 등의 실습을 진행했다. 내 졸업 논문 주제에 사용되는 기술이 <code>Object Detection</code>이라서 더 재미있게 수업을 들었던 것 같다.</p>
<h1 id="일기">일기</h1>
<p>블로그의 게시 내용이 점점 줄어들고 있는데, 이건 귀찮아서라기보다 정말 너무 바빠지고 있어서 그렇다.</p>
<p>다음주부터 팀프로젝트로 AI Hackaton을 해야하는데, 주제를 선정해야한다..
지금까지 배운 내용을 가지고 실 서비스 수준으로 2주안에 구현해야하기때문에 <strong>매일 밤 8시 반까지 회의</strong>하고있다 ㅠ 천안에 도착하면 22시...
아마 해커톤 다 마칠때까지는 정말 바쁠 것 같아서 연속으로 블로그 작성하기도 쉽지 않을 것 같다.
<strong>시간나는대로 작성해야지!</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI 1기 [6주차]]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-6%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-6%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Fri, 05 Aug 2022 15:57:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>ㅋㅋㅋ 개소식을 해본적이 있어야지.. 왜 이렇게 어색한지 ㅠㅠㅠ</strong>
이건 팀원들이 찍어준 영상이며, 실제 개소식 영상 및 소개는 기사로 따로 나갈거라고 한다.</p>
</blockquote>
<p><strong>벌써 6주차다.. 이제 이번주가 지나면 <code>3주차밖에</code> 남지 않는다 ㅠㅠ 시간이 왜 이렇게 빠른지</strong></p>
<h1 id="36일차">36일차</h1>
<p>SKT 쉬는날이라 우리도 휴강!
대신 8월 말쯤에 토요일에 한번 보강으로 대체한다 ㅠㅠ</p>
<h1 id="37일차--38일차">37일차 ~ 38일차</h1>
<p>기존에 ML, DL 강의를 해주시던 강사님이 코로나에 걸리셔서 다시 안드로이드 프로그래밍으로 돌아왔다.
나는 3년간 앱 개발을 해와서 대부분 아는 내용이었기 때문에 실습만 따라 진행하고, 주어진 실습을 마쳤을 때는 코딩테스트 문제들을 풀며 시간을 보냈다.</p>
<p>비전공자분들이나, 앱 개발을 처음 하시는 분들이라면 어플리케이션의 구조, API를 다루는 방법을 배울 수 있는 좋은 기회일수도 있겠다고 생각했다.</p>
<h1 id="39일차">39일차</h1>
<p>다른 분반에서 Azure를 강의해주시던 강사님이 대체로 MicroSoft Azure강의를 해 주시러 왔다.
1주차때 들었던 수업 내용이라 거의 다 까먹었는데, 다시 기억할 수 있도록 실습위주로 진행 해주셨다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/48eef5aa-f6f9-49ea-a586-53158f5c0ec6/image.png" alt=""></p>
<ul>
<li>실습 내용 중, Azure를 이용하여 Windows Server를 연 상태</li>
</ul>
<h1 id="40일차">40일차</h1>
<p>40일차에는 Azure + 도커와 쿠버네티스 실습을 병행했다.
도커와 쿠버네티스의 중요성을 다시금 깨닫게 되긴 했지만, 사실 프로젝트에 적용도 못해본 상태라 완벽히 이해가 되진 않아 간단하게 <strong>토이프로젝트</strong>라도 해보면서 더 이해해보려고한다.</p>
<h2 id="개소식">개소식</h2>
<p>SKT에서 진행하는 첫번째 <code>K-Digital Platform</code>이기 때문에 개소식을 진행한다고 한다.
개소식이라는 단어를 나는 처음들어봤다... 듣고 대강 어떤건지 추상은 됐지만...</p>
<p>여튼, SKT 운영진 분들께서 개소식에 참여할 대표 수강생을 선착순 모집한다는 카톡이 온지 10분정도 뒤에 확인 했는데, 이미 톡방에서 절반 이상의 사람들이 읽어서 <code>마감됐겠지?</code> 라는 생각과, <code>만약 마감 안됐으면 이런 이벤트에 참여할 기회가 인생에 몇번이나 있을까?</code> 라는 생각에 지원했더니 당첨됐다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/fee2bf33-93c5-4f97-8c0b-b99ac7048fb6/image.png" alt=""></p>
<p>항상 먼저 적극적으로 나서줘서 감사하다고 맛있는 밥과 선물을 주신 SKT분들.. ㅎ 감사합니다!<del>(밥과 선물이 뭔지는 비밀)</del></p>
<blockquote>
<p>아... SKT 임직원분들도 제 블로그를 보셨다고........................
ㅎㅎ......감사합니다 최대한 많은 정보 담아보겠습니다..
<strong>(SKT FLYAI 2기 지원자 분들은 블로그 꼭 쓰시길!)</strong></p>
</blockquote>
<h1 id="일기">일기</h1>
<h2 id="팀원들과의-회식">팀원들과의 회식</h2>
<p>원래 <code>인생네컷</code>을 찍자는 취지로 팀원들과 저녁을 함께 먹게 됐는데, 팀원중 한 분이 선약이 있으신 바람에 인생네컷은 다음에 찍는걸로 하고, <strong>맛있는 저녁</strong>과 <strong>보드게임</strong>을 즐겼다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/1c2cba25-d1e9-4472-a29e-53c38be95f68/image.JPG" alt=""></p>
<ul>
<li>기름이 너무많이 튀어서 앞치마랑 물수건으로 팔 보호하는중... <del>(강한자들만 살아남는 고깃집ㅋㅋㅋ)</del></li>
</ul>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/125b27a1-930e-4ccf-a3fe-6509177215ac/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/153480a1-eee9-467d-b8fb-bad3cc3c6749/image.png" alt="">
진짜 보드게임도 엄청 오랜만에 하는데, 뒷골이 땡길정도로 웃어서 너무 즐거웠다 ㅋㅋㅋㅋ <strong>우리 팀원들 다 개그맨 해야함 ㅠㅠㅠ</strong></p>
<h1 id="앞으로-해야할-일들">앞으로 해야할 일들..</h1>
<p>코딩테스트 스터디야 매일, 매주 꾸준히 하고있고...</p>
<p>총 10주차 중에, 마지막 2주차에는 AI 해커톤 팀프로젝트가 이루어진다.
이 때 그냥 해커톤 수준에서 끝낼 프로젝트보단, <code>실 서비스</code>까지 할 수 있는 프로젝트를 하고싶어 고민중이다.</p>
<p>Flask와 Cloud Server, Kubernetes, ML이나 DL을 이용한 프로젝트를 하려는데, 항상 아이디어가 문제다.
<strong>좋은 아이디어가 생기면 결국 완벽히 해낼거니까 ㅎ.. 끝까지 힘내자 파이팅!</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI 1기 [5주차]]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-5%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-5%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Mon, 01 Aug 2022 16:58:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>SKT 이천 인재개발원으로 2박 3일간 워크숍을 갔다왔다.</strong></p>
</blockquote>
<p>정말 감동이고, 감사드렸던 부분인데.. 우리가 인턴쉽도 아니고, 일반 아카데미일 뿐인데 너무나도 많은 혜택을 누릴 수 있게 해주심에 매번 감사드리고 항상 힘이난다.. 사랑해요 <code>SKT</code>...</p>
<h1 id="29일차워크숍-1일차">29일차[워크숍 1일차]</h1>
<h2 id="출발">출발</h2>
<p>원래는 서울 SKT 보라매사옥에서 일괄 이동이었으나, 나는 왕복 시간까지 계산해보면, <code>천안 -&gt; 서울 -&gt; 이천 -&gt; 서울 -&gt; 천안</code>의 이동시간이 <strong><code>9시간</code></strong>이 소요되는 상황이었다.</p>
<p>그래서 SKT 임직원분들께 자차로 이동해도 되는지 여쭙고, 상관없다고 말씀해주셔서 나 홀로 자차로 이천에 가게되었다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/e2229b1d-66e3-4f15-955d-286bc27fd7ac/image.PNG" alt="">
문제는 천안에서 출발하면 그저 그런데, 주말에 대전에 볼 일이 있어 대전에 내려갔다가 너무 피곤해서 <strong>자취방(대전)에서 이천</strong>으로 바로 출발하게 되었다.</p>
<p>도착했을 때는 정말 감탄밖에 안나왔다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/86fce09d-da9f-4131-85d4-598cefd4a9b7/image.png" alt=""></p>
<p>무슨 개발원이 이렇게 호화로운가.................
한참 넋놓고 있다가 다른 팀원들이 도착할 때 까지 먼저 강당으로 가 있었다.</p>
<h2 id="skt-인재개발원-도착">SKT 인재개발원 도착</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/6f8188af-3f3c-4535-9819-b5787f96d611/image.png" alt=""></p>
<p><code>여기는 SKT 인재개발원, FMI이다.</code>
나도 꽤 일찍왔는데, 임직원분들은 잠은 주무시는지 걱정된다. 훨씬 빨리 오셔서 준비중이셨던..
<img src="https://velog.velcdn.com/images/kc0584-dev/post/50338f93-3807-44ff-a690-1acee5b33c3d/image.png" alt="">
<strong>목적</strong> 제대로 이루신 것 같다. 이 얘기를 왜 하냐면 밑에 기숙사가 나오는데 무슨 호텔인줄 알았다..
연수원 시설 경험을 통해 <strong><code>대기업을 가고싶은 내 욕망은 끝도없이 커져갔다.</code></strong></p>
<h2 id="팀프로젝트해커톤">팀프로젝트(해커톤..?)</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/0af66888-2416-4bdc-827d-4a9013dc5ef5/image.png" alt="">
이어서, 바로 UI/UX에 대한 특강을 들었는데, 처음에는 왜 듣나 싶었지만, 역시 SKT.. 다 이유가 있었다.
인공지능과 연관되어 필요한 부분들에 대해 설명 해 주셨다.
그리고, <strong>원래 하루종일 팀프로젝트를 진행하며</strong> UI/UX를 잘 다룬 기업이나, 새로운 아이템을 프로젝트로 결과를 내야했지만 시간이 부족해서 모든 팀원들에게 주어진 시간은 <strong><code>단 1시간</code></strong>이었다.</p>
<p>근데, 진짜 못할 것 같다고 생각했던 팀프로젝트에서 <strong>8팀 모두 한 팀도 낙오 없이</strong> 모두 훌륭하게 결과를 발표했고, 역시 시키면 다 하는 한국인들이라고 다시한번 생각했다 ㅋㅋ.. 다들 대단했어요..</p>
<h2 id="기숙사">기숙사</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/40bf6966-4e4e-4aaa-a35f-6b2f189e68c1/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/699b1b29-1214-4dd7-b2ae-b286f4c4e550/image.png" alt=""><img src="https://velog.velcdn.com/images/kc0584-dev/post/86aa3c9b-6284-41aa-a728-6ada6fd5920f/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/abb84e49-5ffd-41f9-8a7b-a0a9379a8a24/image.png" alt="">
기숙사라는 단어가 너무 낯설다.. 이건 호텔아닌가?
상상을 초월하는 복지에 FLYAI 과정을 진행하고있는 모든 수강생들은 기립박수를 쳤다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/973ec0c3-f34c-436a-9d08-4717e63cc09e/image.png" alt="">
이건 기숙사에서 본 바깥 뷰이다.. 너무 행복했다..</p>
<h2 id="점심">점심</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/ef627156-7cf5-49a9-b737-4f3085e2e42c/image.png" alt="">
점심은 꼬막비빔밥.
이게 식당이라니 말도안된다.. 레스토랑 아닌가... .......... ...... 대기업 짱...</p>
<h2 id="skt-개발자와의-토크콘서트">SKT 개발자와의 토크콘서트</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/3cd92592-f1f6-4626-a56b-996968fdb5a2/image.png" alt="">
기숙사 구경을 마치고, 점심을 먹은 뒤, 현업에서 근무하시고 있는 개발자분들과의 토크콘서트가 이어졌다.
어떻게 SKT에 왔는지 부터, 어떤 업무를 맡고 계신지 등.. 사실 기억나는건 SKT에서 사용하고있는 <strong>협업 Tool들</strong>과 <strong>이거</strong> 하나밖에 없다.
<code>여러분들 FLYAI 과정 마치고 회사에서 만나서 인사해요~!</code>
이 말 한마디가 너무 감사했다. 절실하고 열심히 하는 사람들에게 현업에서 만나자는 이 말이 너무도 감사했다.</p>
<h2 id="인재개발원-구경">인재개발원 구경</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/8430a679-f2e7-4f41-9dd1-fb2c1bebda1f/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/cea0aa5f-ddac-445b-a071-cdc9a01fbb31/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/2d2e55cd-5125-4c9e-b69f-128d55e1edad/image.png" alt=""></p>
<p>여기저기 나무와 꽃이 굉장히 예쁘게 꾸며져있는데, 사진으로는 못찍었지만 매일 관리하는 축구장(?)도 있고 엄청 예쁜곳도 많이 있었다.</p>
<h2 id="레크레이션">레크레이션</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/c856b422-ed8b-4c1b-9eb1-e8c600c68d9f/image.png" alt="">
엄청난 크기의 강당 사이즈에 말문이 막혔다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/acb02b55-3a61-41d3-9b59-f88d1149253b/image.png" alt="">
20대 후반에 레크레이션을 이렇게 재밌게 즐겨도 되는걸까...
정말 머리비우고 노는데만 집중하다보니 너무너무 즐거운 하루였다.</p>
<p>이 이후 팀원들과 술을 새벽 2시까지 먹었다는~~</p>
<h1 id="30일차워크숍-2일차">30일차[워크숍 2일차]</h1>
<p><strong>워크숍에서 2일차와 3일차에는 수업을 진행했다.</strong>
레크레이션의 여파일까, 몸이 굉장히 쑤시고 피곤해 아침은 거르고 수업을 들었다.
<code>ML 실습</code>과 배운 내용으로 <strong><code>DACON</code></strong> <code>인공지능 경진대회 참가</code>를 진행하였다.</p>
<h2 id="점심-1">점심</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/524848a1-9471-4a59-894d-6d0c35919e20/image.png" alt=""></p>
<p>두 눈을 의심했다. 중복이라고 삼계탕을 점심으로 주셨다.. SKT 홀릭이 되어버릴 것 같다.................
당연히 너무 맛있었고, 팀원들과 점심 후 카페도 갈겸, 드라이브도 할겸 밖에 나갔다 왔다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/b6bc8f40-b21a-4a85-abb8-a49ebd634590/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/750ef555-3845-4831-9033-4ff5efd02a3d/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/e1ce48b3-7ae5-4ad5-804b-8305d720511e/image.JPG" alt=""></p>
<p>뷰도 이쁘고, 괜찮은 카페였는데 가격 미쳐버렸다.. 아메리카노 한잔에 6천원 ㅋㅋ</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/8760a02b-cf84-409e-b39f-d8bfc62fce53/image.png" alt="">
팀원들과 한방!</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/20983d98-1610-470a-a9b4-a08f05b92e7b/image.png" alt="">
그냥 찍어주셨는데도 뒤 뷰가 너무 예뻐서 잘나왔다...
아닌가? 장인의 손길이 담겨서 그런건가? ㅎ</p>
<h2 id="만찬">만찬</h2>
<p>모든 수업이 끝난 후, 또 놀랐는데 진짜 언제까지 놀라야할지 모르겠다.
고기, 전골, 술, 음료 모든것이 무제한으로 제공되는 만찬이 시작되었다.
<del>(혹시 술 얼마나 먹을 수 있냐고 물어보니, 먹을 수 있을 때 까지 먹어보라고 하셨다. 그래서 새벽 4시까지 먹었다ㅋㅋ...)</del>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/13b4bdf7-0baa-48a2-a831-0170f7b95735/image.png" alt="">
아, 여기 만찬을 주시는 자리에서 팀들 중 대표 1명이 장기자랑 하면 선물로 뭐 준다고하셔서 <strong>촛불하나</strong> 불렀는데 나중에 요기요 쿠폰 5만원짜리 주셨다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/8b5feb00-47a3-4642-ad15-f4d95613e7a6/image.png" alt="">
900원으로 가족들이랑 정말 맛있게, 배부르게 먹었습니다! <code>감사합니다 SKT 운영진분들!</code>
<del>(근데 진짜 배달비 돌았나..)</del></p>
<h1 id="31일차워크숍-3일차">31일차[워크숍 3일차]</h1>
<p>마지막날이다. 너무 행복한 시간들을 보내고 이제 다시 일상으로 돌아올 때다..
아침에 수업듣다 목말라서 쉬는시간에 팀원들과 여기 인재개발원 안에 있는 편의점에 갔는데 왠걸?
<img src="https://velog.velcdn.com/images/kc0584-dev/post/14b178d2-b75f-45a6-b0d0-2fc866bc69e0/image.png" alt="">
<img src="https://velog.velcdn.com/images/kc0584-dev/post/e0ff82e0-9c84-4370-92f7-e18814a1761a/image.png" alt="">
말로만 듣던 전설의 포켓몬빵이 3개나 있었다 ㅋㅋㅋㅋㅋ 보자마자 싹쓰리~!</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/658a150d-75b5-41c5-a722-833f9fecc560/image.png" alt="">
오후 수업을 마치고, 입구앞에서 하산하기 전에 한장.
절대 내 평생 잊지 못할 2박3일이었던 것 같다.</p>
<h1 id="32일차--33일차">32일차 ~ 33일차</h1>
<p>다시 돌아와 이제 딥러닝에 대해 배웠다.
실습을 하면서 이제 좀 이해하고 있는 단계인데, 아직 완전히 이해하지 못해서 나중에 블로그에 따로 정리 할 예정이다.</p>
<p>그리고 딥러닝 실습을 하면서 <code>Google Colab</code>이랑 <code>Keggle Notebook</code>에서 제공해주는 <code>GPU</code>도 다 써버려서 <code>Colab Pro</code>를 살지, 연구실 컴퓨터로 원격 접속해서 실습할지 고민중이다.</p>
<h1 id="코딩테스트-스터디">코딩테스트 스터디</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/6a73e785-6e96-4493-9e78-c500f275905a/image.png" alt="">
코딩테스트 스터디도 시작했다.
이제 다음주부터 더 바쁜 하루하루를 보낼 생각이다.
혼자하면 재미없는 코테를 나는 다른사람들과 함께했을 때 더 재미를 느껴 시작한 스터디인데, 많은 사람들과 오래오래 같이 하고싶다...</p>
<p><strong>남은 기간도 힘내자 파이팅!</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI 1기 [4주차]]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-1%EA%B8%B0-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Mon, 01 Aug 2022 15:49:59 GMT</pubDate>
            <description><![CDATA[<h1 id="22일차">22일차</h1>
<p>벌써 SKT FLYAI 과정을 진행한지 1달이 지났다.
시간이 너무 빠르다는건 그만큼 열심히 하루하루 달려왔다는거겠지?</p>
<p>22일차에는 머신러닝에 대한 설명과, 분류 / 회귀에 대한 수업을 진행하였다.
대학원 수업에서 이미 들었던 내용들이었지만, 깊게 배우지 못해 수박 겉핥기 식으로만 알고 있던 내용들이었는데 다시배우니 이렇게 재밌을 수가 없었다.</p>
<h1 id="23일차">23일차</h1>
<p>머신러닝을 직접 실습해보았다. 유명한 Iris Datasets으로 KNN알고리즘도 구현 해 보고, 분류/회귀에 대해 확실하게 배웠다. 여기서 아나콘다의 필요성과 Jupyter Notebook, Jupyter Lab을 많이 사용하게 되었는데, 나는 개인적으로 <code>Jupyter Lab</code>이 사용하기에 더 편했다.</p>
<h1 id="24일차">24일차</h1>
<p>다시 뒤로 돌아와, 인공지능에 대해 배우게 되었다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/ea9cbc5a-7b93-4475-a790-2dc024e3dc41/image.jpeg" alt="">
간단하게 설명하면 비전공자들이 보는 <code>인공지능</code>의 시점은 <strong>AI</strong>이다.
알고리즘을 자동화한 것도 인공지능이고 냉장고의 현재 온도를 조정하거나, 에어컨이 온도를 상황에 맞게 자동으로 바꾼다던지.. 이런 것도 <strong>AI</strong> 인공지능이다.</p>
<p><strong>ML(머신러닝)</strong>은 이보다 더 심화된, 학습을 통해 정확도를 낼 수 있는 인공지능이다.
단, ML은 사람이 <code>HyperParameter</code>를 계속 수정해줘야 하는 반면에, <strong>DL(딥러닝)</strong>은 그렇지 않다.</p>
<p><strong>DL</strong>은 인공신경망을 통해 정확도를 내는데, 처음에 모델을 구성하고 적당한 <code>HyperParameter</code>값을 주면 더이상 사람의 개입이 필요 없어진다.</p>
<blockquote>
<p><strong>그럼 무조건 Deep-Learning이 좋은거 아닌가?</strong></p>
</blockquote>
<p>나도 처음엔 그렇게 생각했다.
<strong>근데 아니다. 각자 필요한 분야가 있다.</strong>
간단히 구현할 수 있는 부분은 ML로 구현하는것이 좋고, 이 또한 ML안에서 <strong>라벨링이 잘 되어있는 데이터셋이 많다면</strong> ML이 압도적으로 빠르고 높은 결과물을 내기도 한다.</p>
<p>도저히 ML만으로 정확도를 판단하기 어려운 문제에 직면했을 때 <strong>Deep-Learning</strong>을 사용하는 것이다.
<em>-&gt; 라고 강의해주셨던 *</em>한양대 교수님<strong>이 말씀 해 주셨지만, 실습을 통해 이것저것 구현하다보니 **나도 이 말에 동의한다.</strong> *</p>
<h1 id="25일차">25일차</h1>
<p>퍼셉트론과 손실함수, GAN에 대해 깊게 배우는 시간이었다.
위에서 데이터셋이 많을수록 ML을 사용함이 시간적으로도 비용적으로도 높은 결과물을 내기도 한다고 했는데,
그럼 <code>데이터셋 모아서 ML 사용하면 되지, 왜 DL을 사용하나?</code>에 대해 생각 해 볼수 있다.</p>
<p>이미지에 라벨링을 한다는 것이 컴퓨터가 자동으로 해주는 것이 아니라, 사람이 직접 해주어야 하는데,
아래 사진과 같이 누구나 할 수 있는 이런 라벨링은 문제가 되지 않는다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/694c2b5a-fa27-41a2-add5-091a6ad48048/image.png" alt=""></p>
<p>예를들어, 엑스레이 사진을 통해 이 환자가 암인지 아닌지 판단하려면 어떻게 해야할까?
<strong>당연히 전문가가 필요하다. 근데 그 전문가들이 시간이 남아돌아서 라벨링을 하루종일 해줄 수 있을까?</strong>
그렇지 않기 때문에 데이터를 모으는데엔 천문학적인 시간과 비용이 들어감으로, 모든 데이터를 모을 수 없다.</p>
<blockquote>
<p><strong>애초에 라벨링을 할 데이터 자체가 없으면 어떡할까?</strong></p>
</blockquote>
<p>이게 무슨소리인가 하면, 전 세계에서 <code>엑스레이 데이터</code>를 가장 많이 가지고있는 나라는 대한민국, 우리나라다.
외국에서는 엑스레이를 한번 촬영하려면 수십, 수백만원이 들기 때문에 애초에 데이터가 많이 없다.
하지만 우리나라는?</p>
<p><strong>환자: 의사선생님.. 저 다리를 삔거같은데요..</strong>
<strong>의사: 아 그럼 엑스레이부터 찍어보시죠!</strong></p>
<p>ㅋㅋ 이렇게 때문에 우리나라에 엑스레이 데이터를 달라고 해외에서 요청하는 경우가 굉장히 많다고 한다.
이처럼, 다른 나라에서는 라벨링을 할 데이터 자체가 많이 없기 때문에 이런경우 <code>딥러닝</code>을 많이 사용한다.</p>
<p>머신러닝에서 비지도학습이라는게 있는데, 이걸 딥러닝하고 헷갈리는 사람들이 많다. <del>(맞다. 내 얘기다.)</del>
ML의 비지도학습은 이미지는 있는데, 라벨링이 되어있지 않은 데이터들을 알아서 학습시키는 것을 의미하고,
DL은 그냥 이미지랑 라벨링된 데이터조차 얼마 없을 때 사용한다.</p>
<p>그래서 Deep-Learning은 데이터가 많으면 많을수록 정확도 부분에서 매우 유리하게 작용한다.
하지만, 엄청나게 많은 데이터를 때려박기만 한다고 무조건 정확도가 높을까?</p>
<p><strong>그것도 아니다.</strong> 이걸 과적합이라고 하는데, 물론 이 과적합에 대해서 해결방안도 있다.
이 내용은 나중에 따로 다시 다루도록 하겠다.</p>
<h2 id="팀프로젝트">팀프로젝트</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/5960661a-6d48-4f78-84df-3c25c676d872/image.png" alt="">
GAN에 대해서도 많이 배우는 시간이었는데, 항상 궁금했던 내용들이 다 수업에 나오고, 이걸 팀프로젝트로 각자 원하는 주제로 정리하여 발표하는 시간이 있어 매우 유용한 시간이었다.</p>
<p>우리팀이 발표한 내용은 <code>SRGAN</code>, <code>Super Resolution GAN</code>이다.</p>
<ul>
<li>짧게 얘기하면, SRGAN은 저해상도 이미지를 고해상도 이미지로 변환하는 기술이다.</li>
</ul>
<p>다른 팀들이 재치있고 잘 정리된 내용으로 발표한 것을 보니 더 이해가 잘 됐던 부분들도 있고,
항상 재미있게 수업을 들을 수 있는 것 같다.</p>
<h1 id="26일차">26일차</h1>
<p>다층 퍼셉트론에 대해서 배우는 시간이었다.
딥러닝에서 다루는 주제인데, 사실 너무 어려워서 다시 공부하고 블로그에 정리해보려한다.</p>
<h1 id="일기">일기</h1>
<h2 id="팀-회식">팀 회식</h2>
<p>SKT 운영진분들과 점심시간에 간단한 회식을 진행했다. 내 인생 첫 편백찜인데, 정말 맛있었다.
고생한다고, 더 힘내달라고 이런 맛있는 밥도 사주시고... SKT분들은 날개없는 천사분들만 임직원이 될 수 있나보다..
<img src="https://velog.velcdn.com/images/kc0584-dev/post/a6a33c3b-4a3a-4419-a5aa-3452135147d8/image.png" alt=""></p>
<h2 id="스타벅스-써머-캐리백">스타벅스 써머 캐리백</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/16295900-eb94-41a2-9143-287a10dc1076/image.png" alt="">
스타벅스 프리퀀시를 열심히 모아 캐리백을 받았다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/ee4e1c18-bed6-4630-8f2f-e62e59988cff/image.png" alt="">
출처 중앙일보</p>
<p><strong>어..?</strong></p>
<h2 id="콩빵-사랑하시죠">콩빵.. 사랑하시죠?</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/3f1481f9-4c9e-424b-b6ef-093950d6c191/image.png" alt=""></p>
<p>ㅋㅋㅋ 전 게시물보고 콩빵 드시러가심.. 같은학교 동문님이신데 너무 귀엽삼</p>
<h2 id="보라매공원-산책">보라매공원 산책</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a4cf4ed6-c4ad-4d4d-82ca-34f7f0182b82/image.png" alt=""></p>
<p>팀원들과 점심먹고 근처 보라매공원으로 산책을 갔다.
이렇게 뷰 좋은 곳에 안와봤다니.. 이건 손해야...</p>
<h2 id="그림">그림</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/696ca5a5-cc6c-41ae-a868-40446ab859ee/image.jpg" alt=""></p>
<p>ㅋㅋ 블로그 보고 <code>반성하는 개발자</code>라는 내 1줄 소개에 한줄 더 추가해주셨다.
우리팀원분들 넘 귀여워요</p>
<p>아래는 팀원들과 그린 그림들~~
<img src="https://velog.velcdn.com/images/kc0584-dev/post/52eebb2f-0fae-4e15-80eb-7e8744ab3e22/image.PNG" alt=""><img src="https://velog.velcdn.com/images/kc0584-dev/post/7b12e94c-664d-4f8e-8d70-544eaa556a0e/image.PNG" alt=""><img src="https://velog.velcdn.com/images/kc0584-dev/post/01e6eae9-a779-4a69-987b-2fd40420f5c5/image.jpeg" alt=""></p>
<p>내 트레이드 마크가 꿀벌이라서 팀원분께 꿀벌 그려달라했더니 진짜 고퀄로 그려주셨다 ㄷㄷ..
위에 보이는 꿀벌인데 넘 사랑스럽지않나요..</p>
<h2 id="빠지">빠지</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/f32b95fc-542f-4449-83d8-b1ffc7b741f8/image.png" alt="">
주말에 친구들과 캠프통 아일랜드로 놀러갔다.
인생 첫 빠지였는데, 재미는 둘째치고 이 회사의 예약페이지에서 <strong>보안관련 이슈</strong>를 하나 찾아 무제한 이용권 2개를 무료로 받았다. 아마 내가 개발자가 아니었다면 찾지 못했을 <strong>개인정보와 관련된 크리티컬한 문제</strong>였어서 좀 더 보람을 느끼는 하루(?)였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] Pandas]]></title>
            <link>https://velog.io/@kc0584-dev/Python-Pandas</link>
            <guid>https://velog.io/@kc0584-dev/Python-Pandas</guid>
            <pubDate>Sun, 31 Jul 2022 16:31:33 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>앞 게시글에서 <code>Numpy</code>에 대해 알아봤는데, <strong>Pandas</strong>는 Numpy와 세트라고 해도 무관하다.
Pandas는 <code>Excel</code>이라고 생각하면 편하다. 그래서 굉장히 많은 데이터들은 대개 <code>csv</code>파일로 저장이 되는데, 이 데이터들을 빠르게 수정하고, 추가하고, 원하는 데이터로 변환하기 좋게 만들어 둔 라이브러리가 <code>Pandas</code>이다.</p>
<p>말로만 설명하면 역시 이해하기 어렵다. 코드와 설명을 함께하여 이해 해보자.</p>
<h2 id="pandas란">Pandas란?</h2>
<p>... 작성중</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] Numpy]]></title>
            <link>https://velog.io/@kc0584-dev/Python-Numpy</link>
            <guid>https://velog.io/@kc0584-dev/Python-Numpy</guid>
            <pubDate>Fri, 29 Jul 2022 00:09:13 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p><code>빅데이터</code>, <code>머신러닝</code>, <code>딥러닝</code> 등... 개발 분야에서 굉장히 핫 한 키워드들이다.
위 키워드들에 대해 자세히 배울때, Python으로 직접 구현해 보고 싶을 때, 절대 필수적으로 알아야 하는 두 가지가 <strong><code>Numpy</code></strong>, <strong><code>Pandas</code></strong>이다.</p>
<p>다른 블로거 분들도 굉장히 자세하게 정확한 정보들을 주고 계시지만, 나 같이 <strong>난독증</strong> 있고 <strong>물음표 살인마</strong>인 사람들에게 더 도움이 될 정보들을 담아보려 한다.</p>
<p>또한, <strong>Numpy를 사용하지 않았을 때</strong> 직접 작성해야하는 코드의 효율성을 직접 비교하며 알아보려 한다.</p>
<h2 id="numpy를-왜-쓰는가">Numpy를 왜 쓰는가?</h2>
<blockquote>
<p><strong><code>벡터</code>와 <code>행렬연산</code>을 지원해서 더 빨리 계산된다는 건 알겠고,
그래서 뭐 때문에 성능이 더 좋아서 사용하는데?</strong></p>
</blockquote>
<hr>
<h2 id="시간복잡도big-o">시간복잡도(Big-O)</h2>
<blockquote>
<p><strong>Big-O 표기법을 잘 모르는 사람을 위해 아래에 표를 기재 해두겠다.</strong>
(아래로 갈 수록 오래 걸린다고 생각하면 된다.)</p>
</blockquote>
<table>
<thead>
<tr>
<th>표기법</th>
<th>형태</th>
<th>예시</th>
</tr>
</thead>
<tbody><tr>
<td>O(1)</td>
<td>상수</td>
<td>data[i] = 인덱스로 값 찾기</td>
</tr>
<tr>
<td>O(log n)</td>
<td>로그</td>
<td>이진 탐색</td>
</tr>
<tr>
<td>O(n)</td>
<td>선형</td>
<td>for문</td>
</tr>
<tr>
<td>O(n log n)</td>
<td>선형로그</td>
<td>data.sort() = 파이썬 기본 정렬</td>
</tr>
<tr>
<td>O(n^2)</td>
<td>이차</td>
<td>이중 for문</td>
</tr>
<tr>
<td>O(n^3)</td>
<td>삼차</td>
<td>삼중 for문</td>
</tr>
</tbody></table>
<hr>
<p>간단한 예시로 <strong>리스트 각각에 3을 더한 요소를 반환</strong>하는 프로그램을 작성 해 보자.</p>
<pre><code class="language-python">score = [12, 34, 56]
</code></pre>
<pre><code class="language-python"># 일반적인 방법
score_origin = [3+i for i in score]
print(score_origin)</code></pre>
<p><strong>결과:</strong> <code>[15, 37, 59]</code></p>
<pre><code class="language-python"># Numpy 사용
score_numpy = np.array(score)+3
print(score_numpy)</code></pre>
<p><strong>결과:</strong> <code>[15 37 59]</code></p>
<p>결과를 보면 다른점은 <code>,</code>가 있는지 없는지 하나밖에 안보인다.
이것만 봐서는 뭐가 나은지, 왜 좋은지를 모르겠으니 <strong><em>실험</em></strong>을 하나 해보자.</p>
<h3 id="numpy-vs-list">Numpy VS List</h3>
<p>1억개의 데이터를 생성을 하고, 시간을 측정해보자.</p>
<pre><code class="language-python"># 일반적인 방법
import time
start = time.time()
arr = [i for i in range(100000000)]
end = time.time()
print(&#39;list 1억개 생성 소요시간은 &#39;, end-start, &#39;초입니다.&#39;)</code></pre>
<p><strong>결과:</strong> <code>list 1억개 생성 소요시간은  6.2452921867370605 초입니다.</code></p>
<pre><code class="language-python"># Numpy 사용
import time
import numpy as np
start = time.time()
arr = np.arange(100000000)
end = time.time()
print(&#39;numpy array 1억개 생성 소요시간은 &#39;, end-start, &#39;초입니다.&#39;)</code></pre>
<p><strong>결과:</strong> <code>numpy array 1억개 생성 소요시간은  0.9000861644744873 초입니다.</code></p>
<p>1억개의 데이터인데도 시간 차이가 상당한 것을 알 수 있다.
이 데이터들이 10억, 100억개가 넘어가면 더욱 더 많은 차이를 보일 것이다.
왜냐면 <strong>Numpy의 시간복잡도</strong>는 <code>O(1)</code>, <strong>기본 for문을 거친 데이터 생성</strong>은 <code>O(n)</code>이기 때문이다.</p>
<h3 id="둘-다-데이터를-생성하는-것-뿐인데-numpy는-무슨-원리로-이렇게-빨리-되는건가"><strong>둘 다 데이터를 생성하는 것 뿐인데 Numpy는 무슨 원리로 이렇게 빨리 되는건가?</strong></h3>
<p>예제 하나를 보면 바로 이해가 가능 할 것이다.</p>
<blockquote>
<p><strong>Python List</strong></p>
</blockquote>
<pre><code class="language-python"># Python
python_list = [&#39;100&#39;, 200, True, 3.14]
print(python_list)</code></pre>
<p><strong>결과:</strong> <code>[&#39;100&#39;, 200, True, 3.14]</code></p>
<pre><code class="language-python"># Python
python_list = [&#39;100&#39;, 200, True, 3.14]
for e in python_list:
    print(type(e))</code></pre>
<p><strong>결과:</strong>
<code>&lt;class &#39;str&#39;&gt;</code>
<code>&lt;class &#39;int&#39;&gt;</code>
<code>&lt;class &#39;bool&#39;&gt;</code>
<code>&lt;class &#39;float&#39;&gt;</code></p>
<p><strong>Python List</strong>로 생성한 원소들은 각자 모두 Type을 <code>개별</code>로 저장 된다는 것을 알 수 있다.</p>
<blockquote>
<p><strong>그럼, Numpy List는?</strong></p>
</blockquote>
<pre><code class="language-python"># Numpy
python_list = np.array([&#39;100&#39;, 200, True, 3.14])
print(python_list)</code></pre>
<p><strong>결과:</strong> <code>[&#39;100&#39; &#39;200&#39; &#39;True&#39; &#39;3.14&#39;]</code></p>
<pre><code class="language-python"># Numpy
python_list = np.array([&#39;100&#39;, 200, True, 3.14])
for e in python_list:
    print(type(e))</code></pre>
<p><strong>결과:</strong>
<code>&lt;class &#39;numpy.str_&#39;&gt;</code>
<code>&lt;class &#39;numpy.str_&#39;&gt;</code>
<code>&lt;class &#39;numpy.str_&#39;&gt;</code>
<code>&lt;class &#39;numpy.str_&#39;&gt;</code></p>
<p><strong>모든 값이</strong> <code>str</code> Type으로 바뀐것을 알 수 있다.
이렇듯, Numpy는 한 가지 Type으로만 데이터를 담기 때문에 더 빠르다는 것을 알 수 있다.</p>
<blockquote>
<p><strong>그럼 Numpy는 여러 Type의 데이터를 못 담나?</strong></p>
</blockquote>
<p><strong>그건 아니다.</strong></p>
<pre><code class="language-python"># Numpy
python_list = np.array([&#39;100&#39;, 200, True, 3.14], dtype=object)
for e in python_list:
    print(type(e))</code></pre>
<p><strong>결과:</strong>
<code>&lt;class &#39;str&#39;&gt;</code>
<code>&lt;class &#39;int&#39;&gt;</code>
<code>&lt;class &#39;bool&#39;&gt;</code>
<code>&lt;class &#39;float&#39;&gt;</code></p>
<p>위 코드처럼, 배열에 저장할 때 <code>dtype=object</code>를 넣어주면 각각 데이터 타입을 유지하여 저장할 수 있다.</p>
<p><strong>근데 이렇게 쓸거면 그냥 Numpy 쓰지않는게 좋다.</strong>
같은 데이터 빨리 행렬연산 하려고 <code>Numpy</code>쓰는거지, 여러 데이터 타입을 담으려고 쓰는건 아니니까..</p>
<h4 id="broadcasting">BroadCasting</h4>
<p>Numpy는 <strong>BroadCasting</strong>이라는 것이 있다.</p>
<blockquote>
<p><code>BroadCasting</code>이란, 다른 차원을 가지고 있는 두 개의 피연산자를 <strong>산술 연산하는 도중 산술 연산이 가능</strong>하도록 <strong>차원을 맞춰주는 것이다.</strong></p>
</blockquote>
<p>이 덕에 Numpy를 사용하면 방대한 양의 데이터도 순식간에 처리할 수 있는 속도가 나오는 것이다.</p>
<blockquote>
<p><strong>BroadCasting도 무조건 되는건 아니고, 크게 2가지의 조건이 있다.</strong></p>
</blockquote>
<p>__조건1: __연산 할 데이터가 1개의 사이즈</p>
<ul>
<li>조건이 충족되는 예시:<ul>
<li><code>[1, 2, 3, 4]*3</code></li>
</ul>
</li>
<li>조건이 충족되지 않는 예시:<ul>
<li><code>[1, 2, 3, 4]*[5, 6, 7]</code></li>
</ul>
</li>
</ul>
<p>__조건2: __연산 할 데이터의 사이즈가 같을 때</p>
<ul>
<li><code>[1, 2, 3, 4]*[5, 6, 7, 8]</code></li>
</ul>
<p><strong>이정도만 알아도 될 것 같다.</strong></p>
<h2 id="numpy-활용">Numpy 활용</h2>
<p>실제로 Numpy가 어떻게 많이 사용되는지 보자.</p>
<h3 id="shape">shape</h3>
<pre><code class="language-python">dim1 = [1, 2, 3]                                             # 1차원 데이터
dim2 = [[1, 2, 3, 4], [6, 7, 8, 9]]                            # 2차원 데이터
dim3 = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]    # 3차원 데이터</code></pre>
<pre><code class="language-python">score_numpy = np.array(dim1)
score_numpy.shape</code></pre>
<p><strong>결과:</strong> <code>(3,)</code></p>
<pre><code class="language-python">score_numpy = np.array(dim2)
score_numpy.shape</code></pre>
<p><strong>결과:</strong> <code>(2, 4)</code></p>
<pre><code class="language-python">score_numpy = np.array(dim3)
score_numpy.shape</code></pre>
<p><strong>결과:</strong> <code>(2, 2, 3)</code></p>
<p>위 데이터들이 출력되는게 어떤것을 뜻하는지 이해가 가는가?
순서대로 1차원, 2차원, 3차원의 데이터이다. </p>
<p><strong>쉽게 얘기하면</strong>
1차원의 경우 <code>(3, )</code>으로 끊어져있는 모습을 볼 수 있는데, 이는 type이 <code>tuple</code>이라 그런 것이고, 데이터의 개수를 표시해준다.
2차원의 경우 <code>(2, 4)</code>로 나누어진 이유는 4개의 데이터가 2묶음 있다는 뜻이다.
3차원 데이터의 경우도 마찬가지. <code>(2, 2, 3)</code>로 출력된 이유는 3개의 데이터가 2묶음씩 2개 있다는 뜻이다.</p>
<p><strong>더 쉽게 얘기하면</strong>
4차원 이상의 다차원에서도 <strong>뒤에 있는 값부터 순서대로 보면 된다.</strong></p>
<p><strong>더 더 쉽게 얘기하면</strong>
<code>(2, 2, 3)</code>
<code>(3차원, 2차원, 1차원)</code></p>
<h3 id="dtype">dtype</h3>
<pre><code class="language-python">arr = np.array([1.21, 2, 3, 4.4])
print(arr.dtype)
print(arr)</code></pre>
<p><strong>결과:</strong> 
<code>float64</code>
<code>[1.21 2.   3.   4.4 ]</code></p>
<p><code>dtype</code>은 특정 변수, 객체 등의 type이 뭔지 알 수 있게 해준다.</p>
<h3 id="astype">astype</h3>
<pre><code class="language-python">arr = np.array([1.21, 2, 3, 4.4])
arr = arr.astype(&#39;int64&#39;)
print(arr)</code></pre>
<p><strong>결과:</strong> 
<code>[1 2 3 4]</code></p>
<p><code>astype</code>은 elements의 type을 한번에 변환 시켜준다.</p>
<h3 id="boolean-indexing">Boolean Indexing</h3>
<p><strong>이거 굉장히 좋다..</strong></p>
<pre><code class="language-python">x = np.array([1, 4, 2, 3, 9])
x &gt; 2</code></pre>
<p><strong>결과:</strong> 
<code>array([False,  True, False,  True,  True])</code></p>
<blockquote>
<p><strong>근데 이게 뭐가좋아요?</strong></p>
</blockquote>
<pre><code class="language-python">result = x &gt; 2
result.sum()</code></pre>
<p><strong>결과:</strong> 
<code>3</code>
기본적으로 <code>True == 1</code>, <code>False == 0</code>이다.
그래서 위와 같이 <code>sum()</code>을 사용해서 수많은 데이터 중 조건보다 큰 값, 작은 값등이 총 몇개있는지 빠르게 구할 수 있다.
실제로 머신러닝, 딥러닝에서 데이터 전 처리 과정 중, <strong>결측치</strong>를 구할때 많이 사용하는 방법이기도 하다.</p>
<h3 id="concatenate--stack">concatenate &amp; stack</h3>
<p><strong>이건 정말 확실히 알고가는게 좋다.</strong>
여러 차원의 데이터를 한번에 합치고 싶은데, 행 방향으로 합치거나, 열 방향으로 합칠 수 있다.</p>
<pre><code class="language-python">arr1 = np.array([[1, 2, 3, 4],[11, 12, 13, 14]])
arr2 = np.array([[5, 6, 7, 8],[15, 16, 17, 18]])</code></pre>
<ul>
<li>이런 데이터가 있다고 가정해보자.</li>
</ul>
<h4 id="concatenateaxis0--vstack">concatenate(axis=0) == vstack</h4>
<pre><code class="language-python"># concatenate(axis=0)
np.concatenate((arr1, arr2), axis=0)</code></pre>
<pre><code class="language-python"># vstack
np.vstack((arr1, arr2))</code></pre>
<p><strong>결과:</strong> </p>
<pre><code class="language-python">array([[ 1,  2,  3,  4],
       [11, 12, 13, 14],
       [ 5,  6,  7,  8],
       [15, 16, 17, 18]])</code></pre>
<p>위 두가지 기능 모두 데이터를 <code>행</code>으로 합쳐준다.</p>
<h4 id="concatenateaxis1--hstack">concatenate(axis=1) == hstack</h4>
<pre><code class="language-python"># concatenate(axis=1)
np.concatenate((arr1, arr2), axis=1)</code></pre>
<pre><code class="language-python"># hstack
np.hstack((arr1, arr2))</code></pre>
<p><strong>결과:</strong> </p>
<pre><code class="language-python">array([[ 1,  2,  3,  4,  5,  6,  7,  8],
       [11, 12, 13, 14, 15, 16, 17, 18]])</code></pre>
<p>마찬가지로, 위 두가지 기능 모두 데이터를 <code>열</code>로 합쳐준다.</p>
<hr>
<p>사실 <code>Numpy</code>는 단일로 사용하는 경우는 아직 못봤다.
보통 빅데이터에서 많이 사용되니 <code>pandas</code>나 <code>ML</code>, <code>DL</code>과 연계되어 많이 사용되기 때문에 기본적인 문법은 이정도만 알아도 충분할 것 같다.</p>
<p><strong>그래서 다음 게시글은 <code>Pandas</code>에 대해서 설명하려고 한다.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SKT FLYAI 1기 [3주차]]]></title>
            <link>https://velog.io/@kc0584-dev/SKT-FLYAI-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kc0584-dev/SKT-FLYAI-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Thu, 14 Jul 2022 16:07:32 GMT</pubDate>
            <description><![CDATA[<h1 id="감사-인사">감사 인사</h1>
<blockquote>
<p><strong>먼저, 감사하다는 말씀 먼저 드리겠습니다.</strong></p>
</blockquote>
<p>이번 16일차에 수업이 끝나고 전체 회식이 진행 되었는데, <strong>1조</strong> 분들께서 제 블로그를 정말 많이 봐주고 계신다고... 많은 칭찬과 조언, <del>추후 광고?ㅋㅋㅋ</del> 관련 말씀들, <code>매일 검색해서 봐주시는 분도 있다는 말에</code> 너무 기뻤습니다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/d077681b-6346-40d6-a360-016e2bcddb3a/image.png" alt="">
덕분에 <code>SKT FLYAI</code>검색하면 제 블로그가 최상단에 떠있네요..
밑에 분도 같은 열정반에 블로그 쓰시는 분! <del>(안녕하세요..!ㅋㅋㅋㅋ)</del></p>
<p>먼저 말 걸어주셔서 감사드리고, 블로그 꾸준히 남겨달라는 말들도 해주셔서 감사합니다.
<code>열심히해서 일등하자!</code>, <code>끝까지 불태우자!</code> 모두 마지막까지 파이팅 : &gt;</p>
<h1 id="댓글">댓글</h1>
<blockquote>
<p>그리고, 죄송하다는 말씀도 드리겠습니다.</p>
</blockquote>
<p>블로그를 처음 써보기도 하고 누군가가 댓글을 달 거라고 생각도 하지 못했는데,
한 분이 <strong>SKT FLYAI 지원후기 글</strong>에 문의차 댓글을 달아주셨지만.. 너무 늦게 확인해서 답글이 늦었습니다. <code>자주 잘 확인하도록 하겠습니다.</code></p>
<h1 id="15일차">15일차</h1>
<p><code>Python</code>에 대한 기본 문법, 기초에 대한 실습을 진행했다.
<strong>비전공자</strong> 분들도 계시기 때문에 이런 커리큘럼이 맞춰진 것 같은데, 약간 개선이 필요하다고 생각하는 부분이었다. <em>(<strong>아마 다른 아카데미들도 마찬가지 일 것 같긴한데</strong>, 운영진분들한테 말씀드렸으니 차기에는 더욱 알찬 내용들만 진행될 것 같습니다.)</em>
<del>그래서 이 날에 코테 문제만 수십개를 푼 것 같다.</del></p>
<h1 id="16일차">16일차</h1>
<p><code>Python</code>에 대한 기초를 약간 더 배운 뒤 <code>UI Programming</code>에 대해 찍먹하고, <code>Flask</code>에 대해서 배웠다.</p>
<h2 id="python">Python</h2>
<h3 id="module과-package의-차이점">Module과 Package의 차이점</h3>
<p>나는 그냥 시키면 뚝딱 만들어내는 개발 노예라서 <code>패키지</code>니 <code>모듈</code>이니 별 생각없이 &quot;그냥 그게 그거지 뭐&quot;라며 개발 해 왔는데, 기본도 모르고있었다. <del>(또 반성하자..)</del></p>
<ul>
<li><strong>Module</strong>: main문이 있어서 실행이 가능한 .py 파일</li>
<li><strong>Package</strong>: .py 파일들이 여러개가 있는.. 즉, Module이 여러개가 모여있는 것</li>
</ul>
<h3 id="익명함수">익명함수</h3>
<p>코딩테스트를 준비했던 사람들이면 <code>람다</code>를 많이 사용했거나, 들어봤을 것이다.
강사님이 좋은 예시를 하나 가져와 주셨는데, 그 내용은 아래와 같다.</p>
<pre><code class="language-python"># 일반적인 함수를 사용한 코드
lst = [1, 2, 3, 4, 5]
def square(n):
    return n*n

lst2 = map(square, lst)</code></pre>
<pre><code class="language-python"># 익명함수(람다)를 사용한 코드
lst = [1, 2, 3, 4, 5]
lst2 = map(lambda x: x*x, lst)</code></pre>
<p>위 두 개의 코드는 같은 기능을 하는데, 이렇게 함수가 한 줄에 바로 <code>return</code>하는 값이 있다면 더 간결하고 보기 좋게 만들어 주는게 익명함수이다.</p>
<h2 id="flask">Flask</h2>
<blockquote>
<p><strong>Flask를 혹시 MacOS로 개발하시려는 분이 있다면, 5000번이 아닌 다른 Port를 여시기 바랍니다.</strong>
MacOS는 5000번 포트를 사용할 수 없다고 하네요.</p>
</blockquote>
<p><strong>Flask는 정말 간단하다.</strong></p>
<pre><code class="language-python">from flask import Flask 
app = Flask(__name__) 

@app.route(&#39;/&#39;)
def hello_world():
    return &#39;Hello World&#39;

if __name__ == &#39;__main__&#39;: 
app.run(host = &#39;0.0.0.0&#39;, port = 5002)</code></pre>
<p>위 코드면 일단 웹 페이지가 만들어진다.</p>
<h3 id="variable-rules">Variable Rules</h3>
<ul>
<li>Rule 매개 변수에 변수 부분을 추가하여 URL을 동적으로 작성할 수 있다.</li>
</ul>
<pre><code class="language-python">from flask import Flask 
app = Flask(__name__) 

@app.route(&#39;/hello/&lt;name&gt;&#39;) 
def hello_name(name): 
  return &#39;Hello %s!&#39; % name 

if __name__ == &#39;__main__&#39;: 
app.run(host = &#39;0.0.0.0&#39;, port = 5002)</code></pre>
<blockquote>
<p><strong>결과</strong>
<img src="https://velog.velcdn.com/images/kc0584-dev/post/60936a14-3718-4383-bb39-1d443e384a52/image.png" alt=""></p>
</blockquote>
<h3 id="url-building">URL Building</h3>
<ul>
<li><code>url_for()</code>함수는 특정함수에 대한 URL을 동적으로 작성할 수 있다.</li>
<li>함수는 함수의 이름을 첫 번째 인수로 받아들이고, 각 인수는 URL의 변수 부분에 해당하는 하나 이상의 키워드 인수를 받아들인다.<pre><code class="language-python">from flask import Flask, redirect, url_for, request
app = Flask(__name__)
</code></pre>
</li>
</ul>
<p>@app.route(&#39;/success/<name>&#39;)
def success(name):
    return &#39;welcome %s&#39; %name</p>
<p>@app.route(&#39;/login&#39;, methods = [&#39;POST&#39;, &#39;GET&#39;])
def login():
    if request.method == &#39;POST&#39;:
        user = request.form(&#39;nm&#39;)
        return redirect(url_for(&#39;success&#39;, name = user))<br>else:
        user = request.args.get(&#39;nm&#39;)
        return redirect(url_for(&#39;success&#39;, name = user))</p>
<p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;
    app.run(host = &#39;0.0.0.0&#39;, port = 5002)</p>
<pre><code>### Templates
- 특정 URL에 바인딩 된 함수의 출력을 HTML 문서로 반환할 수 있다.
- 예를 들어 hello()함수가 `&lt;h1&gt;`태그가 부착된 `Hello World`를 렌더링한다.
``` python
from flask import Flask
app = Flask(__name__)

@app.route(&#39;/&#39;)
def index():
    return &#39;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello World&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&#39;

if __name__ == &#39;__main__&#39;:
    app.run(host = &#39;0.0.0.0&#39;, port = 5002)</code></pre><h3 id="cookies">Cookies</h3>
<ul>
<li>방문자 경험과 사이트 통계를 위해 고객의 사용과 그 관련 데이터를 기억하고 추적하기 위하여 cookie를 텍스트 파일 형태로 클라이언트의 컴퓨터에 저장한다.</li>
<li>Request object는 cookie의 속성을 포함하고 있다.</li>
<li>사이트의 만료 시간, 경로 및 도메인 이름도 저장한다.</li>
<li>Flask에서는 cookie를 request object로 설정한다.<ul>
<li>make_response()함수를 사용하여 request object를 가져온다.</li>
<li>request object의 set_cookie() 메소드를 사용하여 cookie를 저장한다.</li>
</ul>
</li>
<li>request.cookies 속성의 get() 메소드로 cookie를 쉽게 읽을 수 있다.</li>
</ul>
<h3 id="sessions">Sessions</h3>
<ul>
<li><code>로그인 ~ 로그아웃</code>까지를 1 세션이라고 한다.</li>
<li>Flask 응용 프로그램에서 SECRET_KEY의 정의가 필요하다.</li>
</ul>
<h3 id="file-uploading">File Uploading</h3>
<ul>
<li>파일 업로드 기능</li>
<li>app.config[&#39;UPLOAD_FOLDER&#39;]<ul>
<li>업로드 폴더의 경로를 정의</li>
</ul>
</li>
<li>app.config[&#39;MAX_CONTENT_PATH&#39;]<ul>
<li>업로드 할 파일의 최대 크기를 바이트 단위로 지정</li>
</ul>
</li>
</ul>
<h2 id="mini-project---예정">Mini Project - 예정</h2>
<p><strong>개발 팀원들의 간단한 인적사항이 적힌 포트폴리오 웹을 개발하는 미니 프로젝트를 17일차에 진행</strong></p>
<h1 id="17일차">17일차</h1>
<h2 id="mini-project">Mini Project</h2>
<p><code>2인1조</code>가 되어 Flask를 활용한 웹 개발 <strong>Mini Project</strong>를 진행했다.</p>
<blockquote>
<p><strong>결과물</strong></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/21016b61-6bd0-4d26-a8d0-c56625d41f5f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/a275c6ea-bdba-4d99-a06f-dae124521fab/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/36a158b4-d78d-43f9-a0d1-aeb7d53130b8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/c0bbaac3-a3c0-448a-84d0-a62e59c83d59/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/de6361a6-667e-4efc-8732-30d1d0441d06/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/ccd50b70-0bff-4e49-b44b-68def9009526/image.png" alt=""></p>
<blockquote>
<p><strong>거의 뭐 해커톤 수준이었다.</strong>
제한시간 2시간 안에 개발해야 했기 때문에 그럴싸한 템플릿 가져와서 약간 수정해서 5분 발표했다. <del>(전 날 술을 너무 많이 먹어서 더 힘들었던건 덤..ㅋㅋㅠ)</del></p>
</blockquote>
<h1 id="18일차--19일차">18일차 ~ 19일차</h1>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/c80b46fc-d4d9-439b-826e-f3de6ea09223/image.png" alt="">
아침에 커피 사러 카페 갔는데 사장님이 오늘도 힘내라고 내가 젤 좋아하는 <code>콩빵</code>을 무료로 주셨당..
시식용으로 내 주신 것도 <strong>갈때마다 다 털어먹고 있는데</strong> 너무 감사합니다..ㅠㅠ
이 카페에 대한 내용은 아래 <strong>일기</strong>에 있으니 <strong>SKT FLYAI 1기</strong> 분들이나, <strong>차기</strong> 지원자 분들이 봤으면 합니다!</p>
<h2 id="python-big-data">Python Big-Data</h2>
<p><strong>오늘부터 오랫동안 뵐 강사님이 오셨다.</strong>
현업에서 인공지능 교육용 소프트웨어/로봇 개발 중이신 대표님이시라고..</p>
<blockquote>
<p>작성하기에 앞서 <strong>별점 <em>5</em>점 만점에 <em>4,294,967,295</em>점 드립니다.</strong>
내가 배우고 싶었던 것, 현업에서 사용되는 것들, 필요한 부분만 설명 등, 모든게 갖춰진 최고의 강사님이시다.. <strong><em>(부산 분이셔서 말이 되게 빠르신데, 오히려 집중이 잘 된다.)</em></strong></p>
</blockquote>
<p>18일차에는 <code>Bigdata</code>, <code>ML</code>, <code>DL</code>등에서 빠지지 않고 사용되는 라이브러리가 있는데, 그 중 <code>Numpy</code>와 <code>Pandas</code>에 대해서 배웠다.
<a href="https://velog.io/@kc0584-dev/Python-Numpy">Numpy에 대해서 궁금하다면?</a>
<a href="https://velog.io/@kc0584-dev/Python-Pandas">Pandas에 대해서 궁금하다면?</a></p>
<h1 id="일기">일기</h1>
<h2 id="애플펜슬2">애플펜슬2</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/b8202a52-9b64-4aa2-ac65-c258475b0e0b/image.png" alt="">
마침 아이패드 미니6을 쓰고있는데, 애플펜슬2를 내돈주고 사기는 너무 아까운 금액이라 구매하지 않고 그냥 쓰고있었다.
그래서 SKT에서 주신 용돈으로 뭘할까 고민하다가 쓰던 신용카드에 포인트가 남아서 전부 전환해버리고 질러버렸다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/c3cce05e-4a09-4139-a4a0-c9ede7eef623/image.png" alt=""></p>
<blockquote>
<p><strong>애플펜슬 2세대 무려 0원!</strong></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/68088033-060d-4377-b6d0-84a8652afcb0/image.PNG" alt="">
<del>굿노트가 애플펜슬보다 비싸네요 ㅎ..</del></p>
<h2 id="i-got-everything">I got everything</h2>
<p>SKT 보라매사옥 1층에 작은 카페가 하나 있다.
맨 처음 여기 왔을 때 진짜 너무맛있는 빵냄새가 나서 <strong>군침이 싹돌았는데</strong> 그게 이 카페에서 파는 <code>콩빵</code> 이었다. 그리고 편하게 먹으라고 시식용 빵을 항상 채워주신다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/53ddcbcf-eff0-4360-b5be-66fb3a57b8da/image.png" alt="">
<strong>진짜 짱 맛있는데 왜 나만 먹는 것 같지.. 혹시 이거 보시면 드셔보세욤 짱맛탱 냠냐미</strong></p>
<p>나는 아침에 잠깰려고 아아 한잔, 점심먹고 식곤증 이길려고 아아 한잔 더 먹는데 여기 카페가 너무 싸서 돈 부담없이 편하게 마시고있다.</p>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/8d606e89-de37-403b-891f-d2e48c599bec/image.png" alt=""></p>
<blockquote>
<p><strong>이러니까 너무 광고같은데 한 푼도 받지 않은 순수 리뷰입니다 ㅎㅎ..</strong></p>
</blockquote>
<h2 id="220712화-전체-회식">220712(화) 전체 회식</h2>
<p><img src="https://velog.velcdn.com/images/kc0584-dev/post/37a61134-534e-40f8-a7bc-af03b4937fab/image.png" alt="">
이 날 <strong>수업이 끝나고</strong> 18시에 전체 회식이 시작됐다. <strong>(수업 외 이루어진 활동)</strong>
매일 수업만 듣느라 얘기 할 기회가 많이 없어서 약간 어색했던 팀원들과도 많은 얘기를하면서 더 친해지고 다른 조원분들하고도 친해지는 계기가 되었다.</p>
<p>SKT 임직원 분들과도 직접 얘기할 수 있는 기회는 많지 않았는데, 이 자리를 통해 궁금한것도 물어보고 좀 더 가까워 졌다는 느낌을 받았다.</p>
<blockquote>
<p><strong>소신발언인데, SK 협력업체에서 일 해봤던 경험으로도 SK분들은 진짜 너무 친절하시다.</strong>
사람이 좋아서 SKT에 가고싶은 이유도 적지 않게 있다.</p>
</blockquote>
<p><strong>근데 다음날이 프로젝트 발표날인데 신나게 먹고 논다고 밤 12시가 되도록 먹었다ㅋㅋ..</strong> <em>(그래도 지각 안함!)</em></p>
<h2 id="열정반-패기반">열정반, 패기반</h2>
<p>왜 열정반, 패기반으로 나뉘었나 궁금해서 회식때 여쭤보니, SK분들은 <code>열정</code>, <code>패기</code>, <code>희망</code>이라는 단어들을 많이 사용한다고 한다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/cbc5d855-2fd6-45ba-b273-336f190d9b6e/image.png" alt="">
그러고 보니 원래 강의실의 에어컨이 고장나서 다른 강의실로 이동했는데, 여기도 <code>열정</code>이 써있었다.</p>
<h2 id="점심시간-볼링">점심시간 볼링</h2>
<p>점심시간은 <code>12:50 ~ 14:00</code>이기 때문에, 점심 먹고나서도 시간이 굉장히 넉넉하다.
SKY FLYAI 아카데미에 같이 온 연구실 친구가 요즘 볼링에 빠졌는데, 한 판 하자고해서 한 반년만에 쳐본 것 같다.
<img src="https://velog.velcdn.com/images/kc0584-dev/post/d64211a8-1234-4344-828e-05d55a487b34/image.png" alt="">
빡겜 할 생각이 아니었는데, 어쩌다보니 <strong>인생점수 달성ㅋㅋㅋ</strong> <del>친구야 미안해..</del></p>
]]></description>
        </item>
    </channel>
</rss>