본문 바로가기
728x90
반응형

코딩

[17] Deep Learning - Regularization [17] Deep Learning - Regularization Regularization DNN에는 다양한 parameter들이 존재한다. parameter들이 많아질수록 모델은 유연해지고 , training data에 overfitting 되기 좋아진다. overfitting을 막기 위해 다양한 Regularization, 규제 기법들이 존재한다. 앞선 글에서 다루었던 배치 정규화도 규제 기법으로 사용할 수 있는 하나의 예시이다. [12] Deep Learning - Batch normalization (tistory.com) [12] Deep Learning - Batch normalization [12] Deep Learning - Batch normalization Batch normalizat.. 더보기
[16] Deep Learning - Learning Rate Scheduling [16] Deep Learning - Learning Rate Scheduling Learning Rate Scheduling 학습률 lr 은 모델을 학습하는 데에 있어 중요한 parameter다. lr은 성능과 훈련 시간 사이를 저울질한다. 너무 낮은 lr은 훈련 시간이 매우 오래 걸리게 만들지만 , 너무 높은 lr은 도착한 최적점에 대해 신뢰를 주지 못할 수 있다. 언제나 유한한 컴퓨팅 자원을 통해 모델을 만드므로 , 적절한 lr을 찾는 것은 언제나 중요하다. 일반적으로 알려진 좋은 lr을 선택하는 방법은 모델 학습을 반복하면서 lr을 지수적으로 증가시킨 후 , 곡선을 확인하고 , 곡선의 상승보다 낮춰서 선택한 lr로 다시 훈련하는 방식이 알려져 있다. 즉 lr을 점차적으로 낮춰갈 텐데 , 이때 사용.. 더보기
알고리즘 - Python / 백준 - 1500번 : 최대 곱 1500번: 최대 곱 (acmicpc.net) 1500번: 최대 곱 세준이는 정수 S와 K가 주어졌을 때, 합이 S인 K개의 양의 정수를 찾으려고 한다. 만약 여러개일 경우 그 곱을 가능한 최대로 하려고 한다. 가능한 최대의 곱을 출력한다. 만약 S=10, K=3이면, 3,3,4는 www.acmicpc.net 풀이 S와 K가 주어졌을 때 , K개의 수를 가지고 S를 만든다. 이때의 K개의 수를 곱해서 나올 수 있는 가장 큰 수를 찾는 문제다. S를 K개의 수로 고르게 나누고 , 남는 나머지를 각각 K개에 될 수 있는 만큼 나눠주면 곱했을 때 가장 큰 경우가 나온다. 예를 들어 , S = 10 , K = 3의 경우 10을 3개로 고르게 나누므로 3 3 3이다. 고르게 나눈 후 나머지가 1 이므로 남는 나머.. 더보기
알고리즘 - Python / 백준 - 2252번 : 줄 세우기 2252번: 줄 세우기 (acmicpc.net) 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 풀이 줄을 세울 때 , 어떤 사람이 어떤 사람 앞에 있어야 한다는 조건들을 가지고 줄을 세울 수 있는 경우를 출력하면 되는 문제다. 만약 4 2의 경우 4번 사람이 2번 사람 앞에 서야 한다는 이야기이다. 모든 조건을 배열에 저장하고 큐를 이용해 위상 정렬을 구현하였다. 1. 모든 노드를 검사해 그 노드의 진입 차수가 0이 라면 큐에 추가한다. ( 노드 간 간선 정보 , .. 더보기
[15] Deep Learning - Optimizer [15] Deep Learning - Optimizer Optimizer network에 사용할 수 있는 optimizer의 종류는 다양하다. 기본적으로 알려져 있는 경사 하강법이 그 예다. 경사 하강법 이외에도 모멘텀 최적화 , 네스테로프 가속 경사 , AdaGrad , RMSProp , Adam , Nadam 등 다양한 optimizer가 존재한다. 모멘텀 최적화 (Momentum Optimization) 공이 경사를 따라 내려갈 때 , 가속도에 의해 종단 속도에 도달할 때까지 속도는 빠르게 가속될 것이다. 모멘텀 최적화는 이러한 원리를 이용한다. 기존의 경사 하강법에서는 한 스텝 한 스텝씩 차근차근 경사를 내려갔다면 , 모멘텀 최적화의 경우는 경사에 공을 굴리는 것과 같이 경사를 내려간다. 모멘텀 .. 더보기
알고리즘 - Python / 백준 - 6571번 : 피보나치 수의 개수 6571번: 피보나치 수의 개수 (acmicpc.net) 6571번: 피보나치 수의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 음이 아닌 두 정수 a와 b로 이루어져 있다. 입력의 마지막 줄에는 0이 두 개 주어진다. (a ≤ b ≤ 10100) 두 수 a와 b는 0으로 www.acmicpc.net 풀이 구간 내에 존재하는 피보나치 수의 개수를 찾는 문제다. 범위가 그리 크지 않아 전체 범위 안의 피보나치 수를 찾고 , 피보나치 수 배열을 통해 구간 내에 얼마나 존재하는지 확인하였다. import sys fibo = [1,1];t = 1 while fibo[-1] < 10**100: fibo.append(fibo[t]+fibo[t-1]) t += 1 while True: .. 더보기
[14] Deep Learning - Transfer Learning & Pre-training [14] Deep Learning - Transfer Learning & Pre-training Transfer Learning 큰 규모의 Network를 학습할 때 , 모든 weight를 처음부터 새로 훈련하려 하면 속도도 느리고 , 시간도 오래 걸릴 것이다. 비슷한 문제를 해결한 Network가 이미 존재한다면 그 Network의 layer를 재사용해서 시간을 단축시킬 수 있다. 이러한 방법이 바로 Transfer Learning , 전이 학습이다. 전이 학습은 훈련속도를 보다 빠르게 해 줄 뿐만 아니라 훈련에 필요한 데이터 수도 줄여준다. 당연하게도 재사용하는 Network의 문제가 새로 해결해야하는 문제와 비슷할수록 더 많은 layer를 재사용할 수 있다. 또한 재사용할 layer의 개수 역시 생.. 더보기
알고리즘 - Python / 백준 - 1806번 : 부분합 1806번: 부분합 (acmicpc.net) 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 풀이 부분합과 투 포인터를 사용하는 기본적인 문제다. 부분합을 통해 배열의 일정 부분의 합을 쉽게 구할 수 있고 , 투 포인터를 활용해서 조건을 만족하는 구간의 길이를 찾으면 된다. 배열의 합이 일정 값 이상이 될 때 까지 뒤쪽 포인터를 전진시키고 해당 값이 만족되면 해당 값이 만족되지 않을 때까지 다시 앞쪽 포인터를 전진시킨다. 앞쪽 포인터가 전진하면서 다시 배열의 합이 일정 값 이하가 되면 다시 조건.. 더보기
반응형