전체 글

전체 글

    ML Strategy (2주차) 정리

    Carrying out Error Analysis "고양이 분류기에서 개도 고양이로 분류해버리는 상황"에 처했다고 해보자. 이때 개가 아니라고 분류하기 위해 시간을 쓸 지말지 결정해야하는 상황에서, 에러 케이스를 분석해볼 수 있다. dev set에서 100개의 잘못 분석된 경우를 구해보고, 여기서 개 사진인 경우의 개수를 세어보자. 만약 5% 정도라면 굳이 시간을 들여서 개에 대한 분석의 성능을 높일 필요는 없을 것이다. 반면 50%가 개 사진이라면 개에 대한 분류를 해볼 필요성을 느낄 것이다. 이런 식으로 이미 에러인 케이스들을 분석해봄으로써(오차분석) 이후 방향을 결정할 수 있다.  만약 모델을 개선하기 위해 여러 아이디어가 있다고 가정해보자. 이럴 때 에러 케이스가 어떤 사진에서 나타나는지 각각 개..

    ML Strategy (1주차) 정리

    Orthogonalization (직교화) Orthogonalization이란? : 보통 직교한다는 것은 두 각이 직각을 이루는 것을 의미한다. 운전을 할 때의 예시에 적용해보면, 하나의 차원은 각도만 움직이고 하나의 차원은 속도를 조절한다고 하면,  두 각이 직각을 이루도록 설계를 하는 것이다. 즉 하나의 버튼 (동작)이 하나의 기능만 하도록 설계하는 것을 의미한다. 이렇게 직교화를 고려해서 설계를 하는 것은, 다양한 하이퍼파라미터를 고려해야하는 ML에서 중요한 요소라고 할 수 있다.    직교화가 잘 되어 있으면 training set -> dev set -> test set -> real word 로 가는 ML 파이프라인에서 각 상황에 맞게 조절할 수 있다. 그런데 예를 들어 early stoppi..

    Hyperparameter Tuning, Batch Normalication and Programming Frameworks (3주차) 정리

    Tuning ProcessHyperparameter을 세팅하는 법. 즉 체계적으로 최적의 Hyperparameter를 찾아내는 법에 대해 알아보자.빨간색으로 표시한 alpha, 즉 learning rate이 제일 중요하다.그 다음에는 노란색으로 표시한 모멘텀 알고리즘에서 사용하는 beta, mini batch size, hidden unit의 개수정도가 중요하다.그리고 세번째로 중요한건 보라색으로 표시한 layer의 개수, learning rate decay가 중요할 것이다. 그 외에는 Adam 알고리즘에서 사용하는 것들인데, 이것들은 사실상 값이 고정되어있어서 큰 의미는 없다. (물론 정해진 답이 있는 문제는 아니다.) 그렇다면, 튜닝할 값의 집합을 어떻게 선택할까? 하이퍼 파라미터의 개수가 많지 않을..

    Optimization Algorithms (2주차) 정리

    *다음 내용은 Andrew ng의 Deep Learning Specialization 과정 중 일부 강좌를 정리한 강의 노트입니다.틀린 내용이 있다면 말씀해주세요. Mini-batch Gradient Descentmachine learning : 매우 empirical process이다. 즉 반복적인 작업이 많다. 따라서 빨리 모델을 훈련시키는 것이 중요하다.→ 난점: 딥러닝은 big data일 때 더 잘 작동하는데 big data일수록 훈련하는 데에 있어 시간이 많이 소요된다. Batch : 모델 학습 중 parameter를 업데이트할 때 사용할 데이터 개수일반적인 Batch는 훈련예제 전부를 한번에 train하는 것이다. 그런데 m이 500만인 경우, 한번 훈련시키는데 시간이 많이 걸리므로 훈련 예제..

    프로그래머스 H-index (C++)

    1. 문제 설명2. 문제 해결정렬만 할 줄 안다면 크게 어려울 문제는 아니었다. 3 0 6 1 5를 오름차순으로 정렬하여0 1 3 5 6 으로 만들고, H-index를 찾기 위해서 위 배열에 상응하는 5 4 3 2 1 배열을 (가상으로) 만들어서  오름차순으로 정렬한 벡터가 배열보다 크거나 같아지는 시점에 반환하도록 하였다.처음에 등호를 안 넣어서 헤맸었다..  3. 코드#include #include #include using namespace std;int solution(vector citations) { int answer = 0; sort(citations.begin(), citations.end()); int len = citations.size(); for (int i ..

    프로그래머스 기능개발 (C++)

    1. 문제 설명2. 문제 해결배열의 길이가 길지 않은 걸 보니 따로 최적화를 할 필요는 없는 구현 문제라고 판단된다. 그냥 문제에서 하라는 대로 차근차근 하면 되어서 어려운 문제는 아니다. 나의 경우 v에 걸리는 시간을 넣어두고, map 자료구조를 사용해서 값을 갱신하는 형태로 코드를 작성하였다. 내 코드도 나쁘지 않다고 생각했는데, 다른 사람들의 풀이를 보니 훨씬 잘 최적화한 경우가 있었다. 내가 놓친 부분은 다음과 같다.  1. 작업일수를 구하기 위해 내부 반복문을 작성하지 않아도 된다. 99에서 현재 작업량을 빼고 속도로 나눠주면 된다. 2. 이 문제에서는 v를 선언해서 계속해서 값을 저장해둘 필요는 없다. int 변수에 지금까지 중 최대 작업량만 넣어두면 된다.   3. 꼭 map 자료구조를 사용..

    프로그래머스 의상 (C++)

    1. 문제 설명 2. 문제 해결경우의 수를 생각하면 쉽게 해결할 수 있다. 만약 한 카테고리에 의상이 2개 있으면, (안 입음, 1개입음, 2개입음) 해서 총 경우의 수가 3가지이다. 그렇게 (카테고리 내 의상의 수 + 1 )를 모두 곱해준다음 1을 빼주면 된다. (모두 안 입는 경우의 수는 존재하지 않으므로) 자료구조는 c++에 있는 map을 활용하였다.  몰랐던 부분 : map 내 초기화가 되지 않은 Key가 들어갈 때 자동으로 0이 초기화되기 때문에, 굳이 조건문을 나눌 필요가 없다. 그리고 for문을 쓰기가 애매해서 auto를 처음 써 보았다.   3. 코드#include #include #include using namespace std;int solution(vector> clothes) { ..

    프로그래머스 구명보트 (C++)

    1. 문제설명 2. 문제해결전형적인 그리디 문제이다. 정렬을 하고 처음 인덱스와 마지막 인덱스를 더했을 때 limit 이하라면, 그것이 최적의 수임을 보장한다는 사실을 알면 어렵지않게 풀 수 있다. 순간 answer 개수를 어떻게 세야 할 지 모르겠어서 전체 길이 (다들 따로 타는 최악의 수)로 답을 초기화하고, 두명이 탈 때마다 하나씩 빼는 식으로 개수를 세었다. 3. 코드#include #include #include using namespace std;int solution(vector people, int limit) { int answer = people.size(); sort(people.begin(), people.end()); int start = 0; int end..