본문 바로가기

전체 글149

[JavaScript] - 자바스크립트와 객체지향 프로그래밍 1. 자바스크립트와 객체지향 프로그래밍 자바스크립트(JavaScript)는 이름에서도 알 수 있듯이 스크립트 프로그래밍 언어이다. 그러나 정확히 말해서 자바스크립트는 객체 기반의 스크립트 프로그래밍 언어라고 할 수 있다. 자바스크립트를 이용하여 웹 어플리케이션을 개발하고자 프로그래밍할 때 많이 사용하는 DOM 객체, XMLHttpRequest 객체 등 자바스크립트에는 많은 객체가 존재한다. [그림 1] 자바스크립트 대부분의 자바스크립트 코드는 브라우저 환경에서 실행된다. 불과 몇 년 전에는 브라우저에 탑재된 자바스크립트 엔진의 성능이 지금보다 매우 떨어졌었기 때문에 자바스크립트 코드가 많은 웹 페이지는 잘못 만들어진 페이지라고 말할 수 있었다. 그러나 지금은 웹 OS라는 말이 나올 정도로 브라우저가 어플.. 2016. 9. 4.
[JavaScript] - 전역 변수의 문제점과 해결 방법 1. 전역 변수의 문제점 자바스크립트는 몇가지 뛰어난 강점을 갖고 있지만, 사실 프로그래밍 언어의 관점에서 보면 잘 디자인된 언어는 아니다. 언어의 잘못된 디자인으로 인해 발생하는 문제 중 대표적인 예시가 전역 변수에 대한 것이다. 자바스크립트에서는 아래의 [코드 1]과 같이 전역 변수를 선언하고, 함수 내부에서 전역 변수를 이용하거나 그와 이름이 똑같은 지역 변수를 선언할 수 있다. 12345function Person(fullName, gender, age) { this.fullName = fullName; this.gender = gender; this.age = age;}Colored by Color Scriptercs[코드 1] 전역 변수로 인한 문제가 발생하는 코드 [코드 1]의 실행 결과는 .. 2016. 9. 4.
[JavaScript] - 코드 블로킹 (Code Blocking) 방지 1. 코드 블로킹 (Cdoe blocking) 코드 블로킹은 어떠한 코드가 실행됨에 따라 해당 코드의 실행 때문에 다른 코드를 실행할 수 없는 현상을 말한다. 아래와 같이 자바스크립트로 작성된 [코드 1]이 있다. 1234567891011121314151617181920212223242526272829 start function func() { document.getElementById('result').innerText = test1(); document.body.style.backgroundColor = '#008299'; } function test1() { var num = 0; for (var i = 0; i 2016. 9. 4.
[머신 러닝] - 은닉 마르코프 모델 (Hidden Markov Model, HMM) Markov model은 어떠한 날씨, 주식가격 등과 같은 어떠한 현상의 변화를 확률 모델로 표현한 것이다. Hidden Markov model (HMM)은 이러한 Markov model에 은닉된 state와 직접적으로 확인 가능한 observation을 추가하여 확장한 것이다. HMM은 observation을 이용하여 간접적으로 은닉된 state를 추론하기 위한 문제를 풀기 위해 사용된다. 아래의 [그림 1]은 은닉된 state와 그에 따른 observation의 개념을 나타낸다. HMM을 이용해 우리가 풀고자 하는 문제는 관측 가능한 것은 오직 $y_t$뿐이며, $y_t$는 $q_t$에 종속적으로 발생한다고 할 때, $y_t$의 sequence를 통해 $q_t$의 sequence를 추론하는 것이다. .. 2016. 9. 2.
라그랑주 승수법 (Lagrange Multiplier Method) 라그랑주 승수법 (Lagrange multiplier method)은 프랑스의 수학자 조세프루이 라그랑주 (Joseph-Louis Lagrange)가 제약 조건이 있는 최적화 문제를 풀기 위해 고안한 방법이다. 라그랑주 승수법은 어떠한 문제의 최적점을 찾는 것이 아니라, 최적점이 되기 위한 조건을 찾는 방법이다. 즉, 최적해의 필요조건을 찾는 방법이다. 1. 기하학적 해석 라그랑주 승수법의 기본 가정은 "제약 조건 $g$를 만족하는 $f$의 최솟값 또는 최댓값은 $f$와 $g$가 접하는 지점에 존재할 수도 있다."는 것이다. 아래의 [그림 1]은 제약 조건 $g(x, y) = c$를 만족하는 $f(x, y)$의 최댓값을 구하는 문제를 나타낸다. 만약, $f(x, y)$의 최댓값을 $k$라고 하면, $k$.. 2016. 9. 1.
[컴파일러] - 구문 분석 (Syntax Analysis) III 1. 상향식 파싱 (bottom-up parsing) 상향식 파싱은 트리의 가장 아래쪽에 위치한 leaf node에서 시작하여 트리의 최상단인 root node쪽으로 진행하면서 파싱을 수행하는 방법이다 [그릠 1]. 상향식 파싱에는 이동-감축 파싱 (shift-reduce parsing)이라고 하는 상향식 파싱의 일반적인 유형이 있으며, 하향식 파싱을 위한 LL 문법과 같이 상향식 파싱을 위한 LR 문법이 있다. 상향식 파싱은 완성된 파스 트리 (parse tree)의 관점에서 볼 때, 가장 우측의 nonterminal 부터 유도 (derivation)가 이루어지기 때문에 입력 문자열에 대한 최우단 유도 (rightmost derivation)을 찾는 것과 같다. [그릠 1] 상향식 파싱 (bottom-.. 2016. 8. 21.
[컴파일러] - 구문 분석 (Syntax Analysis) II 1. 하향식 파싱 (Top-down parsing) 하향식 파싱은 root node에서 시작하여 파스 트리의 노드들을 전위 순서 (preorder)에 따라 생성하는 것이다 [그림 1]. 따라서, 하향식 파싱은 항상 문자열의 가장 왼쪽 nonterminal부터 유도가 이루어지기 때문에 하향식 파싱은 입력 문자열에 대한 최좌단 유도 (leftmost derivation)을 찾는 것과 같다. [그림 1] 하향식 파싱 (top-down parsing)을 통한 파스 트리 (parse tree)의 생성 하향식 파싱에는 가장 일반적인 형태인 재귀적 하강 파싱 (recursive descent parsing)과 재귀가 필요없는 예측 파싱 (predict parsing) 등이 있다. 2, 재귀적 하강 파싱 (Recurs.. 2016. 8. 21.
[컴파일러] - 구문 분석 (Syntax Analysis) I 1. 개요 컴파일러에서는 구문 분석을 수행하는 모듈을 파서 (parser)라고 한다. 파서는 어휘 분석기에서 생성한 토큰 스트림이 생성 가능한 것인지를 판별하고, 토큰 스트림으로부터 파스 트리 (parse tree)를 생성한다.파서의 일반적인 유형으로는 보편적 (universal), 하향식 (top-down), 상향식 (bottom-up)이 있다. 보편적 파싱 방법은 어떠한 문법도 파싱할 수 있지만, 파싱 과정이 매우 비효율적이기 때문에 상용 컴파일러에는 적용될 수 없다. 따라서, 컴파일러에서는 하향식과 상향식 파서가 이용되며, 주로 상향식 파서가 많이 이용된다. 2. 문맥 자유 문법 (Context-free grammar, CFG) 우리가 영어 문장에서 문법적 오류를 검출하기 위해서는 영어 문법을 이해.. 2016. 8. 20.
[머신러닝] - Autoencoder 1. 개요 Autoencoder는 이미지 데이터의 압축을 위해 연구된 인공신경망 (Artificial Neural Networks, ANNs)이다. Autoencoder의 구조는 일반적인 feedforward neural networks (FNNs)와 유사하지만, autoencoder는 비지도 학습 (unsupervised learning) 모델이다 [1]. Autoencoder는 기존에 대부분 데이터의 압축을 위해 활용되었으나, 최근에는 딥 러닝 (deep learning)에 대한 연구가 활발해지면서 입력 벡터의 차원 축소, 은닉층의 학습 등에 많이 이용되고 있다 [2, 3]. 2. 구조 Autoencoder의 구조는 일반적인 FNN의 구조와 매우 유사하며, 한 가지 다른 점은 입력층 (input la.. 2016. 7. 30.
학습 모델의 종류 1. 비지도 학습 (Unsupervised Learning) 비지도 학습은 학습 벡터에 목표값 (target value)이 없을 때, 학습 데이터의 관계를 추론하여 학습을 진행하는 방식이다. 예를 들어, 비지도 학습에서는 고양이라는 것을 알려주지 않고 아래의 그림을 보여준다. 비지도 학습의 목표는 머신러닝 알고리즘이 아래의 [그림 1]을 보고 '네 마리의 동물은 고양이다'라고 학습하는 것이 아니라, '네 마리의 동물은 서로 같은 종'이라는 사실을 추론하는 것이다. [그림 1] 서로 연관이 있는 학습 데이터들 비지도 학습은 통계학의 밀도 추정 (density estimation)과 깊은 연관이 있으며, 머신러닝 및 데이터 마이닝 분야에서는 클러스터링 (clustering)에 많이 이용된다. 비지도 학습 또.. 2016. 7. 21.
딥 러닝 소개 1. 딥 러닝 (Deep Learning) 2012년, 구글은 1만 6천개의 컴퓨터 프로세스와 10억 개 이상의 neural networks 그리고 deep neural networks (DNNs)을 이용하여 유튜브에 업로드 되어 있는 천만 개가 넘는 비디오에서 고양이를 인식해내는 프로젝트에 성공하였다. 구글이 천만 개가 넘는 비디오에서 고양이를 인식하는데 사용한 기술이 바로 딥 러닝이다. 최근에는 마이크로소프트, 페이스북 등의 IT 기업에서도 딥 러닝 분야의 연구팀을 인수하거나 자체 개발 부서를 운영하고 있다. 마이크로소프트에서 개발한 감정 인식 API와 페이스북에서 개발한 얼굴 인식 API는 모두 놀라운 정확도를 보여주고 있다. 2. 딥 러닝의 정의 많은 자료와 기사에서 딥 러닝을 소개하지만, 자료마.. 2016. 7. 18.
[머신러닝] - Complex-Valued Neuron (CVN) 1. 개요 일반적인 neural network의 neuron은 가중치와 입력값, 출력값이 실수 도메인에 존재하며, 이러한 neural networks를 real-valued neural networks (RVNNs)라고 하고, RVNNs를 구성하는 각각의 neuron를 real-valued neuron (RVN)이라고 한다. 이 글에서 소개하는 complex-valued neuron (CVN)은 RVN과 같은 구조 및 데이터 처리 과정을 갖지만, 가중치와 입력값, 출력값이 복소 도메인에 존재한다. CVN으로 이루어지는 complex-valued neural networks (CVNNs)는 현재까지도 많은 연구가 이루어지고 있는 분야이며, RVNNs에 비해 다소 복잡한 구조를 갖고 있다. 특히, 실수 도메.. 2016. 7. 8.