분류 전체보기
FFmpeg와 친해지기
FFmpeg는 모든 음악, 사진, 동영상처리 관련에 있어서 가장 근본이라고 생각한다. 우리가 사용하는 대부분의 코덱은 대부분 FFmpeg의 libavcodec을 기반으로 하고 있으며, Python에서 자주 사용하는 비전 라이브러리인 OpenCV나 MoviePy 등 동영상처리를 위해서는 결국 모두 FFmpeg를 통해서 처리 된다. 그만큼 중요하다는 소리다. 기본 문법 예시 ffmpeg를 실행하면 처리하는 정보를 보여주는데, image to video를 예시로 간단히 살펴보자. Input에 대한 정보 file format pixel format image size input framerate Output에 대한 정보 video codec pixel format video size output bitrate ..
Conditional Generative Adversarial Networks
Conditional Generative Adversarial Nets Introduction 기존의 Generative Adversarial Nets 생성 모델을 학습하기 위해서, 데이터의 확률적 계산의 어려움을 대체하는 GAN. 이 모델은 Markov chain이나 별다른 추측 필요없이 오직 Back-Propagation으로만 학습이 가능하다. (더 자세한 내용은 이전 글 참조) 생성되는 데이터를 조절할 수 있을까? 하지만 기존의 모델은 Unconditional 생성 모델로, 데이터가 생성되는 종류를 제어할 방법이 없다. 하지만 이것이 가능하다면 성능이 향상되지 않을까? 이를 조건 설정을 통해 데이터 생성 과정을 제어하고자 하는 것이 바로 이 논문에서 다룰 Conditional Generative A..
Generative Adversarial Networks
시작하기에 앞서, Generative Model을 간단하게 살펴보자. 머신러닝에는 크게 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 그리고 강화학습(Reinforcement Learning) 3가지로 구분할 수 있다. 이 글에서는 비지도학습중에 대표적으로 클러스터링(Clustering)과 생성모델(Generative Model)이 있다. 오늘은 그중에서도 생성모델에 한번 집중해보자. 생성모델은 주어진 학습 데이터를 학습하여 학습 데이터의 분포를 따르는 유사한 데이터를 생성하는 모델이다. 이러한 생성모델에는 여러 가지 방식들이 있는데, 학습 데이터의 분포를 기반으로 할 것인지(Explicit Density) 혹은 그러한 분포를 몰라도 생성할 것인지(..
객체지향 프로그래밍
면접에서 가장 기본적인 질문 중에 하나, "객체지향 프로그래밍이 뭔가요?". 정말 기본 중의 기본이지만, 막상 대답하고자 하니 말문이 막혔다. 꼬리에 꼬리를 무는 질문들이 쏟아져 나오는 질문이니 만큼, 제대로 알아둘 필요가 있는 주제인 것 같다. 이번 기회에 한번 확실하게 짚고 넘어가도록 하자. 객체지향 프로그래밍 (Object Oriented Programming) 객체지향 프로그래밍이란? 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 이를 활용하여 프로그래밍하는 것을 의미한다. 기존의 프로그램이 순차적으로 동작하는 것과는 다르게 객체들 간의 유기적인 상호작용을 통해서 프로그램이 동작하는 것이 특징이다. 대표적인 객체지향 프로그래밍 언어로는 Java가 있고 대표적인 절차적 프로그래밍 언어로는 ..
Inductive Bias란 무엇일까?
머신러닝에서 Bias는 무슨 의미일까? Inductive Bias라는 용어에서, Bias라는 용어는 무엇을 의미할까? 딥러닝을 공부하다 보면, Bias과 Variance를 한 번쯤은 들어봤을 것이다. Bias는 타겟과 예측값이 얼마나 멀리 떨어져 있는가, 그리고 Variance는 예측값들이 얼마나 퍼져있는가를 의미한다. 따라서 Bias가 높은 경우 데이터로부터 타겟과의 연관성을 잘 찾아내지 못하는 과소적합(Underfitting) 문제가 발생하고, Variance가 높은 경우에는 데이터의 사소한 노이즈나 랜덤한 부분까지 민감하게 고려하는 과적합(Overfitting) 문제가 발생한다. 여기서, Bias를 학습 알고리즘의 잘못된 가정에 의하여 발생하는 오차라고도 하는데, 잘못된 가정에 의하여 데이터에서 중..
딥러닝의 핵심, 역전파
역전파(Back Propagation)란 무엇일까? 역전파의 의미 우선 역전파의 정의에 대해서 알아보자. 역전파는 신경망의 각 노드가 가지고 있는 가중치(Weight)와 편향(Bias)을 학습시키기 위한 알고리즘으로, 딥러닝에 있어서 가장 핵심적인 부분이라고 할 수 있다. 목표(Target)와 모델의 예측 결과(Output)가 얼마나 차이가 나는지 확인하고 그 오차를 바탕으로 가중치와 편향을 뒤에서부터 앞으로 갱신해가는 것을 의미한다. 역전파란 명칭도 바로 이처럼 뒤에서부터 다시 앞으로 거슬러 올라간다는 것에서 나온 것이다. 비결이 뭐야? 역전파가 딥러닝에 있어서 중요하다는 점은 알겠다. 도대체 어떤 방법으로 학습을 진행하고 또 가중치를 갱신하기 위해 어떤 방법으로 이 복잡한 신경망을 계산할 수 있는 것..
[자료구조] 대표적인 자료구조 정리
면접을 보면서 느꼈던 점은 자료구조와 알고리즘은 기본적인 것이라고 생각하는데, 막상 대답하고자 하면 명확하지 않았던 경우가 많았던 것 같다. 이번 기회에 확실히 공부해서 기초를 단단히 해서 보다 논리적으로 문제를 해결하고 싶다. 저번 글에서 자료구조에 대한 전반적인 내용을 다뤘다면, 이번에는 대표적인 자료구조들을 살펴보고 각각의 장단점과 특징을 비교해보자. 배열 (Array) 배열은 가장 기본적인 데이터 구조다. 배열은 인덱스(Index)와 인덱스에 해당하는 요소(Element)로 구성된다. 특징 길이가 고정되어 생성된다. (정적 메모리 할당) Random Access를 지원한다. 즉, 인덱스를 통해서 각 요소에 직접 접근할 수 있는 특징이 있다. 배열은 논리적 순서와 물리적 순서가 일치한다. 인접한 메..
[자료구조] 자료구조? 왜 그렇게 중요할까
자료구조란? 자료구조를 왜 알아둬야 할까? 자료구조는 컴퓨터과학에서 알고리즘과 함께 가장 중요한 기초이론이다. 왜 중요할까? 정의를 한번 살펴보면, 자료구조란 데이터에 편리하게 접근하고, 변경하기 위해서 데이터를 저장하거나 조직하는 방법을 말한다. 다시 말해서, 데이터를 얼마나 효율적으로 저장 관리하고 메모리를 절약하거나 실행시간을 단축시키는 등에 목적을 두고 있다는 것이다. 자료구조의 특징 작업의 효율성, 추상화, 재사용성을 증가시키기 위하여 상황에 따른 적절한 자료구조를 선택할 필요가 있다. 대규모 데이터를 관리 및 활용하는 경우에는 특히 더 중요하다고 볼 수 있다. (1) 효율성 : 상황에 맞는 자료구조를 사용하면 데이터 처리의 효율성이 높아진다. 예를 들어, 사람의 이름과 전화번호 쌍의 데이터가 ..