본문 바로가기

전체 글

(38)
Explainable AI - Integrated Gradients (IG) Axiomatic Attribution for Deep Networks(Mukund Sundararajan et al.)에서 나온 개념이다. 일반적으로 우리가 사용하는 딥러닝 모델은 설명이 힘든 블랙박스 모델이다. 대부분의 딥러닝 모델은 온갖 비선형성을 고려하고, 변수들을 조합하고, 수많은 파라미터(weight etc)를 가진다. 따라서 이러한 모델의 매커니즘을 인간이 알아들을 수 있도록 설명하는 것은 굉장히 어렵다.(이러한 task를 attribution task라고 한다) 하지만 어렵다고 그냥 내버려 둬서는 안된다. 우리의 모델이 accuracy가 높더라도 잘못된 정보를 바탕으로 예측 또는 분류를 진행하고 있을 수도 있기 때문이다. 예를 들어 우리에게 강아지 이미지와 동물 이미지를 잘 분류하는 모델이..
Optimization - Momentum, RMSProp, Adam 최근 예전에 공부했던 딥러닝 optimization 메커니즘이 조금씩 헷갈리기 시작한다. 그래서 헷갈리던 부분만 조금 정리를 해보려한다. 1. Exponentially Weighted Averages Theta(t) : t 시점의 값 v(t) : Exponentially Weighted Average 지금까지의 값들(여기서는 gradient)의 mean을 구하되 Beta를 1보다 작게(주로 0.9와 1 사이 값) 주어 최근 gradient의 영향을 더 많이 반영하는 mean을 구한다. 이를 알아야 뒤에 나오는 Optimization을 이해할 수 있다. 2. Momentum dW : Loss function에서 W에 대해 편미분한 값 vdw : gradient의 exponentially weighted a..
Graph Convolutional Neural Networks (GCN) 이번 글에서는 Semi-supervised classification with Graph Convolutional Networks - Thomas N. Kipf, Max Welling 라는 논문에서 제시하는 GCN model의 코드를 분석해보고자 한다. 이론적 내용은 논문을 참고하자. 이 논문의 목적은 거대한 그래프에서 노드들 중 아주 일부만 레이블이 달려있을 때 노드를 잘 분류하는 모델을 만드는 것이다. - graph based semi supervised learning 간단하게(?) GCN을 설명하자면 graph에서 node들 중 edge로 연결된 node들 끼리만 연산을 하는 Neural Network이다. 이는 아래의 식으로 쉽게 표현가능하다. 여기서 A는 인접행렬을 의미하고, 가장 아래의 식에..
MySQL MySQL은 내가 처음 사용해본 오픈소스 RDBMS(관계형 데이터베이스 관리 시스템)이다. kubuntu + apache 서버 + Mysql + 파이썬을 연동해 사용했는데 굉장히 잘되고 편리했다. 이 글에서는 MySQL에서 사용되는 가장 기본적인 명령어를 정리하겠다. DATABASE 1. 생성 : CREATE DATABASE db_name; 2. 조회 : SHOW DATABASES; 3. 사용 : USE db_name; 4. 삭제 : DROP DATABASE db_name; TABLE DB를 사용하면 내부에 어떤 테이블이 있는지 볼 수 있다 : show tables; 일반적으로 DB TABLE에는 CRUD(Create, Read, Update, Delete) 기능이 있다. 물론 대체로 Read를 이용하겠..
Git이란? 나는 다른 사람들이 github에 올려놓은 딥러닝 모델 코드들을 자주 clone하여 로컬에 저장한다. 남들이 올려놓은 소스코드를 보며 공부도 하고 조금씩 수정해서 내가 해야할 task에 이용하기도 한다. 이 github에 올라놓은 코드들은 git을 이용해 작업한 가장 최신의 결과물이라 보아도 될 것이다. 코드를 자주 수정해서 수정 전에 복사본을 만들어 놓아야하거나, 다른 사람들과 협업하며 코드를 공유, 수정, 통합해야 한다면 Git을 이용하면 편하다. 깃은 버전 컨트롤 시스템이다. 말그대로 버전을 계속 트랙킹해준다. 따라서, 수정을 잘못해도 이전 버전으로 돌아갈 수 있도록 해주고, 수정과 통합을 지속적으로 해야하는 협업을 쉽게 만든다. 깃 기초 명령어 git init - 버전 관리를 하고 싶은 디렉토리에..
Docker란? 어떤 작업을 시작할 때는 항상 그 작업에 알맞는 환경을 구축해야한다. 하지만 이 과정은 굉장히 고통스럽다. 이전에 구축해 놓은 환경과 충돌이 생기는 경우가 허다하고 이전부터 현재까지의 작업이 모두 제대로 작동할 수 있는 환경을 구축하는 것은 너무나도 힘든 일이다. 다른 사람이 구축해놓은 환경을 그대로 가져와서 사용하거나 프로젝트마다 서로 독립된 환경을 구축할 수 있다면 좋을 것이다. 이를 위해 우리는 도커를 이용한다. 도커란 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 컨테이너란 격리된 공간을 만들어 그 공간 안에서 프로세스가 동작하도록 만드는 기술이다. 이는 우리가 일반적으로 알고있는 VM과는 다르다.(예전에 윈도우 컴퓨터에서 리눅스를 이용해야 할 일이 생겨 Oracle VM을 이용했었다.) VM은 호..
graph algorithms - bfs, dfs 그래프구조에서 기초적인 탐색알고리즘으로 이용되는 bfs, dfs를 파이썬으로 구현해보았다. BFS = Breadth-First Search(너비우선탐색) - 루트 노드에서 시작해 인접 노드를 먼저 탐색하는 방법 - 넓게 탐색 - 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이용 - 재귀적으로 동작하지 않음 - 어떤 노드를 방문했었는지 여부를 반드시 검사해야함 - 큐를 이용해서 넓이부터 탐색 DFS = Depth First Search - 루트 노드에서 시작해 다른 branch로 넘어가기 전 해당 branch를 깊게 완벽하게 탐색 - 모든 노드를 방문하고자 할 때 이용 - Stack 이용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ..
Quick Sort divide & conquer algorithm pivot이라고 불리는 임의의 값을 기준으로 분할 정복 쿽 정렬의 성능은 어떠한 pivot 값을 선택하느냐에 영향을 많이 받는다. Best Case에서는 pivot 값을 기준으로 동일한 개수의 작은 값들과 큰 값들이 분할되어 merge sort와 마찬가지로 O(nlogn)의 시간 복잡도를 가지게 된다. 하지만 pivot 값을 기준으로 분할했을 때 값들이 한 편으로 크게 치우치게 되면 성능이 저하된다. Worst Case의 경우 한 편으로만 모든 값이 몰리게 되어 O(n^2)의 시간 복잡도를 가진다. 따라서 상용화를 할 때에는 중앙값(median)에 가까운 pivot 값을 선택하는 것이 좋다. 배열의 처음, 중앙, 마지막에 들어있는 값들 중에 크기가 중간인 ..