분류 전체보기(113)
-
[NLP] RNN(순환 신경망)
저번 장에서는 word2vec에 대해서 살펴보았다. word2vec은 타깃 단어에 대해서 주변 문맥 단어(정보)를 입력하고 이를 단서로 활용하여 타깃을 예측하는 모델이었다. word2vec의 단점은, 주변 문맥 단어를 특정 크기(ex) 2)의 윈도우로 한정 짓기 때문에 큰 맥락 관점에서 문장을 이해하지 못할 수 있다. 반면에 RNN(순환 신경망)은 각 시점(time)에 따라서 은닉 상태(hidden state)를 다음 시점(time)으로 전파함으로써 전체 문맥 정보를 기억한다는 장점을 가진 모델이다. 이제부터 순환신경망을 구현해보자. import numpy as np class RNN: def __init__(self, Wx, Wh, b): self.params = [Wx, Wh, b] self.grad..
2023.02.22 -
[Topcoder] NumberMagicEasy(숫자 마술 - 쉬움)
타로는 하나코에게 마술을 보여준다. 타로: 안녕하세요 하나코. 제가 마술을 보여드릴게요. 16보다 작거나 같은 양의 정수를 상상하십시오. 하나코: 알았어. 상상했어요. 타로: (타로가 하나코에게 1번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요? 하나코: 네. 타로: (타로가 하나코에게 2번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요? 하나코: 아니요. 타로: (타로가 하나코에게 3번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요? 하나코: 네. 타로: (타로가 하나코에게 4번 카드를 보여줍니다.) 이 카드에 당신의 번호가 들어 있나요? 하나코: 네. 타로: 네 번호는 5번이야! 당신의 임무는 이 마술을 모방한 프로그램을 작성하는 것이다. 답에는 하나코의 답이 ..
2023.02.19 -
[Topcoder] MazeMaker(미로 제작자)
마이크 마제마이스터는 최근 그의 뒷마당에 큰 미로를 만들었다. 미로의 i번째 요소의 j번째 문자는 사각형이 통과할 수 없는 덤불이면 'X'이고, 그렇지 않으면 '.'이다. 마이크는 그의 친구인 점프 짐이 미로를 풀기를 원한다. Jim은 열 startCol의 행 startRow에서 시작합니다. 전형적인 미로 해결사들과는 달리, 짐은 단순히 걷는 것이 아니라 미로를 통해 점프할 수 있는 능력을 가지고 있습니다. 짐의 가능한 움직임은 moveRow와 moveCol에 설명되어 있다. i번째 요소는 짐이 현재 행을 moveRow[i]로 변경하고 현재 열을 moveCol[i]로 변경할 수 있는 이동에 해당합니다. 예를 들어 moveRow = {1, 0, -1}이고 moveCol = {3, -2, 5}인 경우 Jim..
2023.02.19 -
[Topcoder] CrazyBot(미친 로봇)
통제 불능의 로봇이 평면에 올려지고, 그것은 무작위적인 단계를 밟는다. 각 단계에서 로봇은 네 방향 중 하나를 무작위로 선택하고 해당 방향으로 한 단위를 이동합니다. 로봇이 북쪽, 남쪽, 동쪽 또는 서쪽을 선택할 확률은 각각 북쪽, 남쪽, 동쪽 및 서쪽 퍼센트입니다. 로봇이 동일한 지점을 두 번 이상 방문하지 않는 경우 로봇의 경로는 단순한 것으로 간주됩니다. (로봇의 시작 지점은 항상 처음 방문한 지점입니다.) 로봇의 경로가 단순할 확률이 포함된 double를 반환합니다. 예를 들어, "EEN"과 "ENW"는 단순하지만, "ENWS"와 "WWWSNE"는 아니다. ('E', 'W', 'N', 'S'는 각각 동서남북을 나타낸다.)\ Definition Class: CrazyBot Method: getPro..
2023.02.19 -
[NLP] word2vec 개선 - 임베딩, 네거티브 샘플링
저번 장에서 구현한 word2vec에는 문제점이 있다. 원핫 인코딩된 단어 벡터와 가중치 행렬을 곱했을 때 결국은 가중치 행렬에서 특정 행만 추출된다. 원핫 인코딩 벡터들의 모음은 결국에 대부분의 원소가 0으로 이루어진 희소행렬이기 때문에 forward 과정에서 불필요한 행렬 계산이 이루어진다. 따라서 우리는 Embedding이란 기법을 알아보고 구현에 적용해본다. 위 그림은 원 핫 인코딩된 벡터와 가중치 행렬과의 행렬 곱 과정을 보여준다. 원핫 벡터는 특정 열만 1을 가지고 있기 때문에 행렬 곱에서 결국 가중치 행렬의 특정 행만 추출하기 때문에 굳이 행렬 곱을 하지 않더라도 행만 추출하면 행렬 곱을 한 것과 같은 효과를 얻을 수 있다. class Embedding: def __init__(self, W..
2023.02.19 -
[NLP] word2vec
이전 장에서는 통계 기반의 방식으로 단어를 벡터화하였다. 전체 말뭉치에서 단어가 나타나는 맥락을 읽어들여서 통계화한 뒤, 이 정보를 벡터화하였다. 이번에 알아볼 기법은 추론 기반의 방식이다. 대표적인 추론 기반 기법으로 word2vec 방식이 있다. word2vec은 신경망을 이용하여 단어를 벡터화한다. 신경망을 훈련시키는 과정을 다시 생각해보자. 신경망에는 입력이 주어지고, 신경망을 통과시켜 어떤 출력을 만들었을 때, 타깃과의 비교를 통해 손실을 계산한다. word2vec에서는 입력이 맥락이고, 타깃이 중앙 단어이다. When I find myself in times of trouble. 여기서는 맥락을 다음과 같이 만들 수 있다. (윈도우가 1일 경우) When I find myself in time..
2023.02.13