Pytorch를 이용해 짠 대부분의 소스코드들에는 nn.Linear() 함수가 거의 꼭 들어가 있는 것을 알 수 있을 것이다. 그만큼 자주 많이 사용되고 크게 어려운 개념은 아니지만, 그렇다고 대충 넘어가면 추후 코드를 이해함에 있어서 문제가 생길 수 있다. 따라서 nn.Linear()에 대해 차근차근 파헤쳐보자. nn.Linear()란? Pytorch에서 선형회귀 모델은 nn.Linear() 함수에 구현되어 있다. Pytorch 공식 문서에서 설명하는 nn.Linear() 함수는 다음과 같다. 입력 인자로 in_features와 out_features를 받고 이에 맞춰 반환한다. 예를 들어 내가 768차원 짜리를 64차원으로 만들고 싶으면 nn.Linear(768,64) 위와 같은 형태로 작성하면 된다..
문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 난이도 Silver 4 입력 조건 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) 출력 조건 상근이가 배달하는 봉지의..
문제 어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다. 수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자. 난이도 Bronze 1 입력 조건 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 ..
문제 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다. 난이도 Bronze 2 입력 조건 첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다. 출력 조건 첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다. 입력 예시 This is String SPACE 1 SPACE S a M p L e I n P u T 0L1A2S3T4L5I6N7E8 출력 예시 10 2 0 2 0 10 1 8 5 6 0 16 0 8 9 0 sys 사용 코드 # sys 사..
문제 문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오. 부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다. 예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다. 난이도 Silver 3 입력 조건 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. 출력 조건 첫째 줄에 S의 서로 다른 부분 문자열의 개수를 출력한다. 입력 예시 ababc 출력 예시 12 처음 짠 코드 s = input() s_list = [] for i in range(1, ..
문제 항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다. 파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 항승이는 길이가 L인 테이프를 무한개 가지고 있다. 항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다. 물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다. 난이도 Silver 3 입력 조건 첫째 줄에 물이 새는 곳..
BERT는 Bidirectional Encoder Representations from Transformers 즉, Transformer의 Encoder 구조를 이용하여 문맥을 양방향으로 이해하는 모델이다. BERT가 나오게 된 배경은 2018년 OpenAI에서 Transformer의 Decoder 구조를 사용하여 GPT-1을 출시했는데, 얼마 지나지 않아 구글에서 “GPT-1은 문맥이 중요한 Task인 QA나 LNI 등에서 좋지 않아 !!”라면서 BERT를 출시했다. 최근 OpenAI의 ChatGPT가 큰 화제를 얻자 이에 맞서 구글에서 Bard를 출시하는 것처럼 두 기업은 뭔가 경쟁 관계를 이어나가고 있는 것 같다. (그래서 NLP가 빠르게 발전할 수 있지 않을까?) 다시 본론으로 돌아와서 BERT는..
이전 포스팅 : https://seungseop.tistory.com/20 [트랜스포머를 활용한 자연어처리] - Intro 본 포스팅은 아마존 자연어 처리 분야 베스트 셀러인 [트랜스포머를 활용한 자연어처리]를 기반으로 스터디를 진행하며 매 챕터마다 공부한 내용을 복습하기 위해 작성한다. 이 책의 구성을 하 seungseop.tistory.com 구글의 연구원들은 2017년 논문에서 시퀀스 모델링(sequence modeling)을 위한 새로운 신경망(neural network) 아키텍처를 제안했다. 트랜스포머(Transformer)란 이름의 이 아키텍처는 기계 번역 작업의 품질과 훈련 비용 면에서 RNN(Recurrent neural network)를 능가했다. 트랜스포머는 2023년 현재 가장 유명한..