분류 전체보기

· AI/NLP
0. AbstractGPT, Bert와 같은 Large Language Model(LLM)을 Fine-tuning하는 것은 굉장히 효과적인 transfer mechanism이지만, fine-tuning은 많은 downstream task들에 대해 파라미터적으로 비효율적이다. (모든 테스크에 대해 항상 전체 모델을 다시 학습시켜야하기 때문이다. 즉, 모든 파라미터를 다시 학습시킨다.)이에 대한 대안으로 논문 저자들은 adapter module을 통해 transfer하는 방법을 제시하고 있다. Adapter module은 compact하고 extensible한 모델을 생성할 수 있다. 각각의 의미는 다음과 같다. Compact Model: 작업마다 조금의 파라미터만을 추가해 문제를 해결하는 모델이다.Exte..
· AI/NLP
1. 기존의 학습 방법GPT, Bert와 같은 Large Language Model(LLM)이 개발된 후 LLM에 언어를 학습시키고 우리가 적용하려는 task 데이터를 학습시키는 Transfer Learning이 활용되었다.Transfer Learning 이전에는 단지 모델이 있으면 그 모델을 우리의 테스크에 맞는 데이터를 활용해 학습시켰다. 이 경우, A라는 task와 B라는 task가 비슷해도, A task를 학습한 모델을 B task를 학습시킬 때 활용할 수 없다. 다시 처음부터 B task를 학습해야한다. 반면, Transfer Learning의 경우 이전 task(Source Task)를 통해 학습시킨 모델을 그대로 활용하여 학습시킬 수 있다는 장점이 있다. 이러한 Transfer Learnin..
해당 문제는 아래와 같은 알고리즘으로 풀이했다.입력받은 수식을 문자열로 저장하고, 문자 하나씩 탐색한다.피연산자의 경우 해당 피연산자에 해당하는 값으로 변환하여 리스트에 순서대로 저장한다. (값으로 변환하기 위해 values 리스트를 사용하고, 해당 값들은 stack에 담긴다.)만약 연산자를 만나는 경우, stack에서 두 값을 꺼내고 해당 연산자에 해당하는 연산을 수행한다.코드는 다음과 같다.import sysinput = sys.stdin.readlinen = int(input())formula = input().rstrip()values = list()stack = list()for i in range(n): values.append(int(input()))for i in formula: ..
해당 문제는 이전에 풀었던 오큰수(17298)과 비슷한 문제다. 단지 while문의 조건만 바꾸어주면 된다. 알고리즘은 다음과 같다.결과를 담을 리스트를 선언한다. 이때 원소들은 모두 -1을 가진다. (result list)각 원소가 몇 번 나왔는지 카운트한 숫자를 담은 dict를 선언한다. (count_dict) 단, 현재 코드에서는 defaultdict를 사용했지만, 그냥 (모든 원소가 0인) 100만까지의 숫자를 담을 수 있는 리스트를 선언해도 된다.stack은 아직 자기보다 많이 나온 수를 찾지 못한 원소들의 인덱스를 담는다. 0번째 인덱스부터 탐색해야하므로 0을 담고 시작한다.반복문을 통해 1번~n-1번 인덱스까지 탐색한다. (탐색 중인 원소를 current_value[=array[i]]라고 하..
해당 문제는 다음과 같은 알고리즘으로 풀이했다.결과를 담을 리스트를 선언한다. 이때 원소들은 모두 -1을 가진다. (result list)stack은 아직 자기보다 큰 수를 찾지 못한 원소들의 인덱스를 담는다. 0번째 인덱스부터 탐색해야하므로 0을 담고 시작한다.반복문을 통해 1번~n-1번 인덱스까지 탐색한다. (탐색 중인 원소를 current_value[=array[i]]라고 하자.)stack에 남아있는 원소가 있고(자기보다 큰 수를 찾지 못한 원소가 있고), 그 원소들 중 가장 오른쪽의 원소와 current_value를 비교했을 때 current_value가 더 크다면, stack에서 가장 오른쪽의 원소를 빼내고, 해당 원소의 NGE값은 current_value로 설정한다. 해당 코드는 다음과 같다...
해당 문제는 다음과 같은 알고리즘으로 풀이했다.레이저는 ()로 표시되어 있다. 따라서 ()부분을 모두 문자 L로 바꾼다. (.replace() 메서드 사용)주어진 문자열(formula)를 탐색한다. 이때 '('부분은 막대가 시작하는 부분으로 막대가 시작하는 부분이 나오면 num_stick에 1을 더해준다. (num_stick은 현재 구간에 있는 막대 개수다.)문자열 탐색 도중 ')'를 만난다면 가장 짧은 막대기 하나가 끝나는 부분이다. 따라서 num_stick에 -1을 해주고, 지금까지 세어준 막대기(result)에 +1을 한다.만약 'L'을 만나면 result에 num_stick을 더해주면 된다. (현재 구간에 쌓여있는 막대 개수만큼 레이저로 잘리기 때문이다.)코드는 다음과 같다.formula = in..
17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 처음에는 해당 문제를 collections 라이브러리의 deque 자료구조를 활용해서 풀었다. 알고리즘은 다음과 같다. 먼저 입력 받은 문자열을 리스트로 변환한다. (리스트로 변환하면 문자열의 각 문자가 원소로 리스트에 들어간다. 예를 들어, "abc" 문자열은 ['a', 'b', 'c']로 들어간다.) 만약 첫 번째 원소가 ''가 나올 때까지 문자를 합쳐준다. '>'가 나온 경우 탐색을 멈추고 태그 내용을 출력한다. 만약 첫 번째..
10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 파이썬 collections 라이브러리의 deque 자료구조를 활용하면 쉽게 구현할 수 있는 문제였다. 코드는 다음과 같다. import sys from collections import deque input = sys.stdin.readline n = int(input()) queue = deque() for _ in range(n): operation = input().rstrip() if operation == "size": print(len..
코딩마루
'분류 전체보기' 카테고리의 글 목록 (5 Page)