분류 전체보기 165

[BOJ] 1715 카드 정렬하기

1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 간단한 그리디 문제였다. 그리디임을 알고 문제를 시작했기 때문에 완전히 문제에 대한 지식이 없이 풀었다고 하기는 힘들다. 문제의 핵심은 카드 수가 적은 묶음부터 합치는 것이다. 이 아이디어는 쉽게 떠올릴 수 있었는데, 8%대에서 틀렸습니다를 봤다. 그 이유는 새로운 카드 묶음을 다시 큐에 집어넣고 다시 두개를 뽑았어야 했는데, 큐를 새롭게 업데이트해주지 않았기 때문이다.

PS/백준 2022.09.27

[Python] Anaconda 가상 환경 설정/삭제

아나콘다에는 가상 환경이라는 유용한 기능이 있기 때문에 여러 패키지의 버전을 따로 따로 사용할 수 있다. 이 기능을 알게된지는 좀 됐지만 아직 실제로 버전에 예민한 작업을 한번도 해보지 않아서 크게 유용함을 느끼지 못 했었다. 아직도 딱히 버전 의존도가 높은 프로젝트는 안 해봤지만, 이전보다는 버전 관리의 중요함을 느낀 상태다. 그런 김에 한 학기 동안 사용할 패키지 버전이 벌써 공지된 수업이 있어서 미리 설정하는 겸 가상 환경 세팅법을 다시 익혔다. 1. 가상 환경 만드는 법 conda create -n env_name conda create -n env_name python==version 2. 가상 환경 리스트 확인 conda env list conda info envs 3. 가상 환경 활성화/비활..

etc/memo 2022.09.04

[BOJ] 2448 별 찍기 - 11 (C/C++)

2448번: 별 찍기 - 11 첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수) www.acmicpc.net 본격적인 학기 시작 전에 여유가 조금 있어서 정말 오랜만에 PS를 했다. 저번 방학 + 학기 초까지는 꽤 열심히 했었는데, 학기가 바빠지고 이번 방학 때는 다른 활동을 하느라 한참 방치되어 있었다. 최근에 C++도 다루지 않았다 보니 평소보다 시간이 좀 더 걸렸던 것 같다. 이 문제는 분할 정복을 이용해서 푸는 문제였다. 문제에 주어진 24를 기준으로 설명하면, 큰 그림은 작은 그림 3개로 쪼갤 수 있다. 또 작은 그림은 더 작은 그림 3개로 쪼갤 수 있는 형태를 가졌다. 그래서 더 이상 쪼갤 수 없는 그림까지 쪼..

PS/백준 2022.09.04

[DSL] Sequence Models Week4 : Transformer Network

드디어 대망의 DSL 마지막 강의다. NLP에서 지대한 영향력을 가지고 있는 transformer에 대해서 배운다. 머신러닝 무식자인 나도 "Attention is all you need."라는 말을 들어봤을 정도로 유명한 모델이다. 1. Tranformer 트랜스포머는 이전 주차에 배웠던 attentio 개념에 CNN을 섞은 모델이라고 한다. 강의에서는 트랜스포머의 핵심을 두 가지로 나눈다. 하나는 self attention이고 나머지 하나는 multi-head attention이다. 우선 첫 번째로 self attention은 이전의 attention과 상당히 유사한 방식으로 구한다. 핵심은 query, key, value로 불리는 세 가지 벡터인 것 같다. Query와 key 내적을 통해 누가, 왜..

[DSL] Sequence Models Week3 : Sequence Models & Attention Mechanism

1주 차에서는 RNN 모델에 대해서, 2주 차에서는 워드 임베딩에 대해서 배웠다. 1주 차에 잠깐 소개했는데, RNN 중에서는 Sequence 데이터를 입력받아서 sequence 데이터로 뱉는 RNN도 있다. 가장 대표적인 예시로는 파파고나 구글 번역기 같은 자동번역기가 있다. 강의에서는 이미지를 입력받아서 이미지에 캡션을 다는 예시도 있었다. 이미지 분류 문제에서 마지막 레이어에 사용하던 소프트맥스층을 떼 버리고 sequence 모델에 입력으로 넣어주면 된다. 1. Basic Models 이전에 배운 language 모델과 sequence to seqeunce 모델은 꽤나 비슷하다. 하지만 가장 큰 차이점으로는 입력이 어떻게 들어가는지 일 것 같다. 전자는 그냥 영 벡터를 입력으로 받아서 sequenc..

[DSL] Sequence Models Week2 : Natural Language Processing & Word Embeddings

이제 본격적으로 자연어 처리는 어떻게 하는 건지 배운다. 1. Word Embedding 자연어 처리를 위해서는 우선 단어를 표현해야 한다. 물론 문자 단위로 해도 되긴 하지만 단어 단위가 뜻을 더 잘 담고 있다. 저번 시간에 사용했던 원핫벡터의 경우 총 10,000개의 단어를 표현하기 위해서는 차원이 10,00개가 필요하다. 그리고 단어가 하나 늘어날 때마다 차원도 하나 증가시켜야 한다. 확장성이 아주 떨어진다. 그리고 단어 사이의 유사도도 전혀 알 방법이 없다. 더해도 안되고 뻬도 안되고 곱해도 안되고 내적, 외적도 안된다. 그래서 워드 임베딩이라는 녀석을 사용한다. 앞으로 원핫벡터는 o, 워드 임베딩 벡터는 e로 표현한다. 워드 임베딩은 단순히 0과 1로 단어를 나타내는게 아니라 어떤 특징에 대한 ..

Golang Project Layout Study

최근 우연히 go를 열심히 사용해야 할 일이 생겼다. 기왕 하는 거 무지성으로 하는 게 아니라 완성도 있는 프로젝트를 만들고 싶다는 생각이 들었다. 코드는 클린 코드 책을 보면서 열심히 깔끔한 코드를 작성하려고 노력하는 중이다. 함수 내의 추상화 레벨 맞추는 게 쉽지 않아서 애를 먹고 있다. 그런데 프로젝트 레이아웃을 깔끔하게 잡는 것도 쉽지 않았다. 그냥 비슷한 코드끼리 뭉쳐놓으면 되지 않나 싶은데 직접 해보려고 하면 잘 되지 않아서 아무래도 뭐라도 참고하는 게 좋을 것 같았다. 막상 레퍼런스를 찾으려고 보니까 적당한 프로젝트를 찾는 것도 쉽지 않았다. 이런 걸 찾아본 적이 있어야지. 그래도 두고두고 보면 도움이 될 것 같은 링크를 몇 개 찾았다. 1.표준 Go 프로젝트 레이아웃 문서 GitHub - ..

etc/memo 2022.07.19

[DSL] Sequence Models Week1 : Recurrent Neural Networks

이제 CNN을 넘어서 DSL의 마지막 챕터인 RNN까지 왔다. 저번엔 주로 이미지를 어떻게 처리하는지 배웠다면 이번엔 음성, 자연어 등의 시퀀스 데이터를 어떻게 처리하는지에 대해서 배운다. 첫 강의 때 여러 시퀀스 데이터의 예시를 보면서 지금까지는 당연히 입력이 시퀀스 데이터겠거니 하던 생각을 고쳐먹을 수 있었다. 음악 생성 알고리즘 같은 경우엔 입력은 없을 수도 있고 출력은 당연히 시퀀스 데이터다. 저번 학기에 캡스톤 프로젝트를 하면서 NLP 맨땅에 헤딩을 해봤기 때문에 용어는 어느 정도 익숙한 게 다행이라면 다행인 것 같다. 1. RNN 처음 시작하는 분야니까 notation부터 정리할 필요가 있다. 이전과는 다르게 괄호가 생겼다. 지금까지 사용했던 데이터와는 다르게 순서(시간) 개념이 들어가..

[DSL] Convolutional Neural Networks Week4 : Face Recognition & Neural Style Transfer

이번 강의의 마지막 주차에서는 조금 더 실제 응용에 가까운 내용을 배운다. 1. Face Recognition 강의 초반에 바이두 본사에서 얼굴 인식으로 출입문을 통과하는 영상을 보여준다. 사실 지금 기술이 어디까지 발전했는지, 저때는 어땠는지 몰라서 막 엄청 신기하지는 않았다. 그래도 인식이 엄청 빨리되긴 하더라. 만약 이런 출입문을 만들고 싶다면 사람 얼굴 인식하는 모델을 개발해야 된다. 지금까지 했던 방식대로라면 A라는 사람의 얼굴에 대해서 학습하기 위해서는 A의 사진이 겁나 많이 필요하다. 그런데 실제로 데이터베이스에 그렇게 사진을 많이 가지고 있는 건 현실적으로 불가능하다. 이 문제를 One Shot Learning이라고 한다. 새로운 직원이 들어올 때마다 신경망을 학습시키기가 어렵기도 어렵다...

[DSL] Convolutional Neural Networks Week3 : Detection Algorithms

이번 주차에는 객체 탐지에 대해서 배울 요량인가 보다. 1. Object Localization & Landmark Detection 본격적인 객체 탐지를 시작하기 전에 맛보기 도메인 이해를 높이기 위한 주제 정도였던 것 같다. 우선 객체 탐지에서는 한 이미지에 객체가 여러 개 있을 수 있다. 대신 지금 말하는 이미지 분류에서는 객체가 하나밖에 없다고 생각하자. 이미지에서 내가 원하는 것을 찾도록 학습을 시키기 위해서는 이미지에 라벨을 붙여서 지도 학습을 해야 된다. 라벨을 도대체 어떻게 붙여야 잘 붙였다고 소문이 날까? 우선 이미지에 어떤 객체가 있는지에 대한 라벨이 필요하다. 내가 찾고 싶은 객체가 자동차, 보행자, 나무라면 이미지마다 각각의 라벨을 붙여줘야 한다. 그리고 그 객체가 어디 있는지에 대..