
문제 링크 https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 문제 설명 이번 문제는 우선순위 큐에 어떤 정수값을 append하되, 일반적인 heapq가 지원하지 않는 큐에서 가장 큰 값도 제거할 수 있는 기능이 추가된 프로그램을 만드는 것이 목표이다. 먼저 test case 개수를 받고 test case마다 지시사항 입력값을 받는다. 지시사항 입력값은 "I 숫자" 또는 "D 1", "D -1"로 I는 큐에 숫자를 대입하는 지시, D는 최소나 ..

합성곱 신경망 (CNN) 이번 장은 합성곱 신경망이 주제이다. 합성곱 신경망은 음성, 이미지 데이터 인식 등 다양한 분야에서 사용된다. 특히 이미지 인식 분야에서 CNN은 신경망의 기초 중의 기초로 반드시 알고 넘어가야 한다. CNN의 구조 CNN과 기존의 Affine 계층은 상당히 유사하다. 결국 이전 층의 결과값을 다음 층의 입력으로 넣으면서 해당 노드와 입력의 유사도를 측정하는 일인 것이다. 다만 Affine 계층에서는 위치적인 정보를 고려하지 않고 단순히 주어진 행렬을 내적을 통해 결과값을 도출했다. 하지만 CNN에서는 위치적인 정보를 고려하기 위해 필터라는 window 개념의 가중치를 사용하게 된다. CNN으로 이루어진 네트워크에서는 Affine 대신 Conv라는 합성곱 계층이 추가된다. 여기에..

학습 관련 기술 이번 chapter에서는 학습과 관련된 기술들인 최적화 방법, 가중치 매개변수 초기화, 하이퍼파라미터 설정 방법, 가중치 감쇠와 드롭아웃, 배치 정규화 등 여러 가지 딥러닝에 사용되는 기술들을 공부한다. 매개변수 갱신 신경망에서의 학습은 손실 함수의 결과가 가장 작아지는 가중치 매개변수를 찾는 것인데, 이는 가중치 매개변수를 최적화하는 일이라고도 한다. 매개변수의 공간은 신경망의 크기에 따라 다르겠지만 심층 신경망의 경우 매우 높은 차원의 공간을 가지기 때문에 최적 매개변수를 찾는 것이 매우 어려운 일이다. 우리는 이전 chapter까지 신경망을 최적화할 때 기울기만을 사용하는 SGD(Stochastic Gradient Descent, 확률적 경사하강법)를 사용했다. 이번에는 SGD보다 ..

오차역전파법 (Backpropogation) chapter 4에서 배웠던 수치 미분으로 기울기를 구하는 방법은 빠르게 역전파의 기울기들을 계산하기 어렵다는 문제가 있다. 그 대신 chapter 5의 오차역전파법에서는 계산 그래프를 그려 빠르게 기울기(gradient)들을 구할 수 있다. 계산그래프 계산그래프는 위 그림과 같이 계산이 필요한 문제들을 노드와 엣지로 그린 것이다. 노드에는 연산자가 엣지에는 연산에 사용되는 수가 표시된다. 위 계산 그래프는 순전파이다. 국소적 계산 국소적 계산은 계산 그래프의 특징이다. 말 그대로 자신과 관계된 작은 범위의 계산만을 진행하는 것이 국소적 계산이다. 국소적 계산은 이후 연쇄 법칙(chain rule)에서 진가를 발휘한다. 해당 노드와 관련된 계산에만 집중해서 연..

신경망 학습 신경망의 특징은 데이터를 보고 학습할 수 있다는 점이다. 여기서 학습은 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 찾고 갱신하는 과정을 말한다. 그럼 이 학습에 대해서 좀 더 알아보자. 데이터 주도 학습 SVM, KNN과 같은 기계학습은 이미지에 포함된 중요한 특징을 사람이 직접 찾아내어 모델에 넣어줘야 하는 특징이 있다. 하지만 신경망은 입력 데이터만 정해주면 기계 자동으로 그 특징을 찾아낸다. 이런 신경망의 특성 때문에 딥러닝은 End-to-End Machine Learning(종단간 기계학습)이라고도 불린다. 훈련 데이터와 시험 데이터 신경망에 적용되는 데이터는 훈련 데이터, 시험 데이터로 나뉘게 된다. 훈련 데이터는 말 그대로 모델의 학습을 위해 사용되는 데이터로 모델 안의..

웹이나 앱개발을 하다보니 비동기, 동기에 대한 개념을 온전히 확립해야 겠다는 생각이 들었다. 때문에 비동기 통신에 대한 개념을 배우고 정리한다. 비동기 통신 비동기 통신에 대해 알아보기 전에 먼저 동기와 비동기에 대해서 알고 넘어가자. 동기 동기는 '동시에 일어난다(synchronous)'라는 뜻으로 시간이 오래 또는 짧게 걸리는 것과 관계없이 반드시 어떤 요청에 대한 결과가 동시에 일어나야 한다. 즉, 어떤 코드를 실행시키면 그 코드의 실행이 완전히 끝나기 전까지 다음 코드가 실행될 수 없다. 비동기 비동기는 '동시에 일어나지 않는다(Asynchronous)'라는 뜻으로 동기와 반대로 요청과 결과가 동시에 일어나지 않을 것이라는 약속이다. 요청과 결과가 동시에 일어나지 않아도 되기 때문에 요청만 발생하..

Repeat is the best medicine for memory. 신경망 신경망은 전 챕터에서 배웠던 퍼셉트론의 구조와 동일하다. 퍼셉트론과 신경망의 차이는 활성화함수인데 이는 뒤에서 더 설명하겠다. 신경망의 구조는 위 그림과 같이 입력층, 은닉층, 출력층이 차례대로 나열된 구조이다. 입력층은 입력되는 Feature의 개수만큼의 노드가, 은닉층과 출력층에서는 재표현되는 Feature의 개수만큼의 노드가 존재한다. 퍼셉트론과의 차이점 퍼셉트론과 신경망의 차이점은 활성화함수다. 다층퍼셉트론에서 이전층의 출력을 다음층의 입력으로 보낼 때 활성화함수는 계단함수(Step Function)가 사용된다. 하지만 신경망에서는 Step Function이 아닌 sigmoid, softmax같은 연속적인 함수가 활성화..

Repeat is the best medicine for memory. 퍼셉트론 (Perceptron) 퍼셉트론은 깊은 신경망, 즉, 딥러닝의 기원이 되는 알고리즘이다. 퍼셉트론의 구조와 흐름을 통해 깊은 신경망(딥러닝)의 Flow를 이해할 수 있고 다양한 variation도 이해할 수 있다. 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력하는 노드(뉴런)를 말한다. 퍼셉트론을 떠올리면 우리 뇌의 가장 작은 전달 구조인 뉴런 또는 전기전자학에서의 노드가 생각이 난다. 이런 예처럼 퍼셉트론은 어떤 값을 받아 그 값들의 합과 곱이 일정 임계값을 넘는다면 +(positive) 신호를, 그렇지 않다면 -(negative) 신호를 내보낼 것이다. 또는 뉴런의 관점에서는 임계값이 넘을 때만 신호를 보내고..

LAN LAN은 Local Area Network의 약자로 한정된 공간에서 네트워크를 구성하는 것을 의미한다. 예를 들어, 피시방에서 여러 컴퓨터를 네트워크로 연결할 때, LAN을 구축한다고 한다. LAN과 반대로 WAN이라는 개념은 Wide Area Network의 약자로 넓은 공간에서 네트워크를 구성하는 것이다. 인터넷에 접속하는 것은 WAN이라고 볼 수 있다. 요즘에는 LAN, WAN을 설치한다는 말 대신에 '네트워킹을 한다'라고 한다. 이더넷(Ethernet) 네트워크를 구성하는 방식, 만드는 방식은 여러가지가 있는데 유명한 방식 중 두 가지가 이더넷과 토큰링이다. 우리가 대개 사용하는 네트워크 구성 방식은 이더넷이다. 네트워크를 구성하는 방식을 알고 있지 않는다면 어떤 LAN카드를 사야할지, 어..

네트워크라는 복잡하고 어려운 CS 전공지식을 유튜브나 간단한 강의로만 배우려고 했던게 내 문제였나보다... 역시 쉽게 얻는 지식은 쉽게 날아갈 뿐이고..! 그래서 많은 사람들이 추천하는 책을 샀다..! 이제부터 이 책으로 스터디도 하고 따로 정리도 해서 블로그에 올릴거야! 라고 마음을 먹었다.. 말리지마라....후 네트워크 추상적으로만 들어왔던 네트워크.. 책의 설명을 통해서 이제야 제대로 이해할 수 있었다. 네트워킹 네트워킹은 단순히 서로 다른 장비들을 연결하는 것을 말한다. 이런 네트워킹이 일부 집단에서 이루어지고 점점 커지면서 확대되었다. 결국 지금에 이르러서는 인터넷이라는 도구도 탄생하게 된 것이다. 정리하자면.. 네트워킹은 단순히 데이터를 통신할 수 있도록 둘을 연결하는 과정이다. 네트워킹을 통..