본문 바로가기

전체

(162)
[PyTorch] PyTorch가 제공하는 Learning rate scheduler 정리 (여기 내용을 많이 참고하여 작성하였습니다.)(** learning rate와 lr이라는 용어를 혼용해서 작성하였습니다.) learning rate는 gradient의 보폭을 말한다. learning rate는 성능에 꽤나 영향을 주는 요소(learning rate를 잘못 설정하면 아예 학습이 안되기도 한다.)이기 때문에 learning rate를 어떻게 설정할 지가 중요하다. 아래의 그림이 learning rate 설정에 따라 loss 그래프에서 어떻게 최적의 weight를 찾아나가는 지를 보여준다.  처음부터 끝까지 같은 learning rate를 사용할 수도 있지만, 학습과정에서 learning rate를 조정하는 learning rate scheduler를 사용할 수도 있다. 처음엔 큰 learn..
[백준/C++] 2661번: 좋은수열 (DFS, 백트랙킹) DFS로 완전탐색을 하되 유망하지 않으면 탐색을 포기하는 기법을 백트랙킹이라고 한다. 이 문제도 역시 백트랙킹으로 푸는 문제이다! 1) 출력할 숫자를 어디에 담을 것인가? -> string에 계속 더해가자. 2) 가지치기 조건은? -> 부분수열이 같은지 체크해서 유효한 수일 때만 dfs! ( 반만 체크하면 된다.) **substr(pos, cnt) pos 위치부터 cnt 갯수만큼의 sub-string을 return #include #include using namespace std; int endFlag = 0; int N; bool isValid(string result) { int len = result.size(); int end = len - 1; for (int i = 1; i
백준 2609번: 최대공약수와 최소공배수(유클리디안 호제법) 그냥 유클리디안 호제법을 마음으로 받아들이자. #include #include using namespace std; int gcd(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; } int lcm(int a, int b, int c) { return a * b / c; } int main() { int M, N; cin >> M >> N; int c = gcd(M, N); cout
[백준/C++] 1929번: 소수 구하기 (여러가지 소수 판별법) 제일 큰 수가 1,000,000으로 for문을 돌며 모든 수를 검사하면 시간초과가 난다. 2가지 방법으로 시간을 줄여보자. (+ endl 쓰면 모든 방법에서 시간초과 나니 '\n'로..) 1. 에라토스테네스의 체 방법 2부터 시작해서 해당 수를 제외한 해당 수의 배수들을 제거한다. #include using namespace std; #define size 1000001 int a[size] = { 0,1 }; int main() { int M, N; cin >> M >> N; for (int i = 2; i
[백준/C++] 9095번: 1,2,3 더하기 (DFS/DP) 1) DFS (모든 조합 체크) #include using namespace std; int test_case, N; int cnt = 0; void solve(int sum) { if (sum == N) { cnt++; return; } if (sum > N) return; for (int i = 1; i > test_case; for (int i = 0; i > N; solve(0); cout test_case; for (int i = 0; i > N; cnt = 0; for (int i = 4; i
[백준/C++] 9663번: N-Queen (DFS, 백트랙킹) 1) 기본가정: 같은 행에 Queen을 놓지 않는다. 2) 유망한 노드인지 확인하는 함수 - 같은 열이나 같은 대각선에 놓이는지 확인 -> 해당되면 유망하지 x - 같은 열 체크: col[i] == col[j] - 같은 대각선 체크: abs(col[i]-col[j]) == i-j #include using namespace std; int col[15]; int N; int cnt = 0; bool promising(int i) { for (int j = 0; j < i; j++) { if (col[j] == col[i] || abs(col[i] - col[j]) == (i - j)) return false; } return true; } void dfs(int i) { //i는 놓은 queen의 수이기..
[백준/C++] 1182번: 부분수열의 합 (DFS) 주의점 1) 연속된 수의 합을 찾는 것이 아니다. ex) N=4, sum=0, arr=[100, 100, 100, -100]일 때, 연속된 수의 합이라면 답이 1개이다. 하지만 (100,-100)조합이 3번 가능하므로 답이 3개이다. 주의점 2) 부분집합의 합이 아니니 중복이 포함된다. ex) N=4, sum=1, arr=[1, -1, 1, 2]일 때, 부분집합의 합이라면 [1], [-1, 2], [1, -1, 1]로 답이 2개이다. 하지만 첫번째 1과 세번째 1은 다른 1로 처리해야한다. 그래서 [1], [1], [-1, 2], [1, -1, 1]로 답이 4개이다. #include #include #include using namespace std; int N, sum; vector arr; int c..
더 깊은 네트워크를 위한 Activation function(활성화 함수) Activation function의 필요성 앞선 포스팅을 통해 perceptron은 fully-connected layer(=dense layer=linear layer)와 sigmoid로 이루어져 있다는 것을 알고있다. perceptron을 아주 많이 쌓게 되면 그것을 DNN(Deep Neural Network)이라고 부른다. 만약 DNN을 이루고 있는 요소 중 sigmoid 함수가 없다면 어떨까? fully-connected layer를 100개를 쌓아도 10000개를 쌓아도 사실 한 층을 쌓은 것과 다를 바 없게 된다. 어차피 선형함수 하나로 표현할 수 있기 때문이다. 그러므로 층을 깊게 쌓는 것이 의미를 갖기 위해서는 sigmoid와 같은 non-linear한 activation function..