분류 전체보기
-
Hyperparameter 튜닝은 어떻게 하는걸까?머신러닝 및 딥러닝 2021. 1. 17. 10:56
딥러닝에는 여러가지 하이퍼 파라미터가 존재한다. 예를들어 대표적으로 몇개만 써보면 1. 층 별로 hidden unit의 갯수 2. 학습률 3. Adam optimizer로 예시를 들면 베타값 2(0.9 와 0.999)개와 입실론값(10^-8) 4. layer의 수 5. 학습률을 쓰지 않는다면 learning rate decay 6. mini-batch 의 크기 7.모멘텀 값(0.9 가 가장 좋은 초기값으로 알려져 있다.) 빨간색이 가장 중요한 하이퍼파라미터이고 그다음 차례대로 중요한 것이 주황색 초록색이라고 생각하면 될 것 이다.(당연히 이렇게가 항상 중요한 순서다 라는 것은 아니다! 일반적으로 그렇다고 생각하면 될 것이다.) 과거의 머신러닝에서는 위의 그림과 같이 하이퍼파라미터가 2개만 있다고 가정했을..
-
Queue언어/파이썬 2021. 1. 16. 19:06
큐는 시퀀스의 한쪽 끝에는 엔티티를 추가하고, 다른 반대쪽 끝에는 제거할 수 있는 엔티티 걸렉션이다. FIFO(First In First Out)로 처리되는, 줄을. 서는 것에 비유할 수 있는 큐는 상대적으로 스택에 비해서 쓰임새가 적다. 그러나 스택에 비해서 그렇다는 얘기일 뿐, 데크(deque)나 우선순위큐(priority queue) 같은 변형들은 여러분야에서 매우 유용하게 쓰인다. 이외에도 너비우선 탐색(Breadth-First Search)이나 캐시등을 구현할때도 널리 사용된다. 파이썬에는 동일한 이름의 queue라는 모듈이 있긴 하지만 이 모듈은 사실상 자료구조로서의 큐보다는 동기화 기능에 집중된 모듈로, 큐 자료형을 위해 널리 쓰이는 모듈은 아니다. 사실상 파이썬의 리스트가 큐의 모든 연산을..
-
Deque언어/파이썬 2021. 1. 16. 18:56
데크는 양쪽에서 삭제와 삽입을 모두 처리할 수 있으며, 스택과 큐의 특징을 모두 갖고 있다. 구현은 배열이나 연결 리스트 모두 가능하지만 이중 연결 리스트로 구현하는 편이 가장 잘 어울린다. 이중 연결 리스트로 구현하게 되면 양쪽으로 head와 tail이라는 이름의 두 포인터를 갖고 있다가 새로운 아이템이 추가될 때마다 앞쪽 또는 뒤쪽으로 연결 시켜주기만 하면 된다. 당연히 연결 후에는 포인터를 이동하면 된다. 파이썬에서는 데크 자료형을 다음과 같이 collections 모듈에서 deque라는 이름으로 지원한다. collections.deque는 그림 10-1과 마찬가지로 이중 연결 리스트로 구현되어 있다. Deque를 사용하면 맨 앞과 맨 뒤에 엔티티를 추가하거나 삭제할 때 모두 O(1)에 실행이 가능..
-
Dropout 이란 무엇인가머신러닝 및 딥러닝 2021. 1. 16. 15:40
Dropout은 신경망의 뉴런을 부분적으로 생략하여 모델의 과적합(overfitting)을 해결해주기 위한 방법중 하나이다. 과적합이란 training dataset으로 학습한 모델의 정확도가 x 축을 layer 수라고 할때 layer를 쌓으면 쌓을 수록 training에 대하여 loss 값은 줄어 들지만 오히려 test set에 대해서는 loss 값이 올라가는것을 예시로 들 수 있을 것이다. 다시 Dropout 으로 돌아가자면 전체 weight를 계산에 참여시키는 것이 아닐 layer에 포함된 weight 중에서 일부만 참여시키는 것이다. 여기서 일부만 참여시키는 것이라는 나머지를 제외 시키라는 말이 아니라 나머지 뉴런을 0으로 만드는 것을 의미한다. 딱봐도 잘 안될거 같은데 직관적인 설명이 이를 경감..
-
CycleGAN 이란?머신러닝 및 딥러닝 2021. 1. 16. 13:28
CycleGAN을 이해하기 앞서 pix2pix 에 대해서 이해가 필요하다 pix2pix pixel to pixel은 말 그대로 하나의 픽셀을 다른 픽셀로 바꿔준다는 의미이다. 아래 이미지와 같이 흑백사진을 컬러사진으로 바꾸거나, label만 부여한 input에 대해 실제 이미지를 생성하거나, edge만 있는 input 에 대하여 완전한 output을 만들어 내는데 사용한다. 아래의 사진을 참고하면 이해하기 더 용이하다. loss function pix2pix의 loss function은 다음과 같다. G(x) 와 y의 차이(여기서 G(x)는 생성한 이미지를 y는 ground truth를 의미한다.), 즉 pixel level의 차이를 최소화 한것을 loss로 두고 학습을 시키면 아래와 같은 결과가 나온다..
-
ADT(추상자료형)언어 2021. 1. 15. 15:27
추상자료형이란 어떤 동작을 해야하는지는 정해져 있지만 실제구현은 정의 되지않은 자료형을 말한다. ADT의 반대용어로는 CDT가 있다. CDT란 ADT의 구현을 포함한 자료형을 이야기 한다. 객체지향프로그래밍에서 추상화의 개념을 떠올리면 이해가 좀 더 빠르다. 수상화란 필수적인 속성만 보여주고, 불필요한 정보는 감추는 것을 의미 하는데 이처럼 인터페이스만 보여주고 실제 구현은 보여주지 않는다는 점에서 ADT는 OOP의 추상화와 비슷한 개념이다. 이해가 아직 모호한거 같아서 예시를 들어보자면 Array, List, Map, Queue, Set, Stack, Table, Tree, Vector는 ADT이다. Queue 는 어떤 동작을 해야하는지 정해져 있지만 이것을 구현한 것은 몇십개가 된다. 실생활의 예시를..
-
os.environ언어/파이썬 2021. 1. 14. 17:29
환경 변수 소프트웨어 개발에서 환경 변수는 일반적으로 운영체제 차원에서 설정해주는 변수를 의미한다. 즉, 파이썬 프로그램 안에서 설정되는 변수가 아닌 외부에서 설정되는 변수들을 얘기한다. 어플리케이션 레벨에서 설정하기가 불가능 하거나 어려운 값들을 환경 변수에 저장하는 경우가 많다. 그 예시로 개발모드와 운영모드를 구분하기 위해서 애플리케이션이 돌아가는 환경 자체를 ENV 등의 이름으로 변수화 해야할 때가 있는데 이는 코드 상에 저장하기가 난해하다. 또한 외부 API와 연동하기 위해 사용하는 접근키나 보안키와 같은 인증 정보는 보안 측면에서 코드상에 저장해서는 안된다. 파이썬에서는 개발자들은 실행파일을 실행하기전에 커멘드라인으로 이것들을 주로 미리 세팅을 해놓는다. 또는 이미 os내에서 세팅이 되어있다...
-
변수 스왑언어 2021. 1. 13. 15:27
두 변수를 바꾸는 가장 널리 알려진 방법은 임시 변수를 놓고 이를 활용하는 방법이다. temp = a a = b b= temp 이 방식은 거의 모든 언어에서 활용할 수 있는 기본적인 방식이지만 파이썬은 임시 변수 없이 변수를 스왑할 수 있다. [Python] a : int = 3 b : int = 5 a, b = b, a 다중 할당이라고 불리는 이방식은 파이썬에서 지원하는 매우 강력한 기능이다. 그렇다면 가독성과 더불어 코드의 양까지 줄일 수 있지만 속도 면에서는 어떨까? 맥북에서 실험결과 2개의 방식은 속도차이가 거의 없다는 것을 알 수 있었다. 그렇다면 다른 언어들은 어떨까? [C++] int a = 3; int b = 5; std::swap(a,b); 리턴값 없이 a와 b의 값을 바꿔주는 swap ..