CS 29

[딥러닝] 6. 최적화

Exponentially weighted averages$v_t = \beta v_{t-1} + (1-\beta) \theta_t$이전 값과 새로운 값을 일정 비율로 섞는 방법을 얘기한다.여기서 \beta의 값에 따라 총 $1/(1-\beta)$개의 개수의 값을 평균내었다고 얘기할 수 있다. 아래 그림에서 빨간 선은 \beta가 0.9,초록 선은 \beta=0.98노란 선은 \beta=0.5일 때의 보습을 보여준것이다. $t=2$일 때를 잠시 생각해보자.위 식에서 보이듯이 초기화를 0으로 하기 때문에, $t$가 작다면 실제값과 $v_t$가 다르게 나오게 된다.예들 들면 $\beta=0.98$일 때, $v_t$는 $0.0196\theta_1 + 0.02 \theta_2$로 실제값보다 많이 작아지게된다...

CS/딥러닝 2026.04.13

[딥러닝] 5. Mini batch와 Batch Normalization

Batch이전 글에서 효율적인 행렬연산을 위해 여러 데이터를 붙이는 Vectorization을 얘기했었다.좋은 방법이지만 만약 데이터의 수가 너무 많아지면 메모리가 부족해질 수 있다.그래서 mini batch를 사용한다.데이터의 일부만을 묶어서 사용하는 방법이다.계산이 크게 달라지는 것 없이 그냥 mini batch를 전체 데이터라고 생각하면 된다. 예를 들어 500만 개의 데이터를 다룰 때 1000개씩 끊어서 이용한다면,batch size는 1000,mini batch 수는 5000이 된다. 한 세트를 처리하는 것을 1 iteration이라고 하고, 위 예시의 경우 5000번의 iteration을 수행하면 전체 데이터를 다 보게 되는데,이를 1 epoch라고 한다. 미니배치 사이즈 정하기미니배치가 무엇..

CS/딥러닝 2026.04.01

[딥러닝] 4. Deep Neural Network

일반적으로 layer수가 3이상이면 deep neural network라고 한다.이전 글에서 봤던 Shallow neural network와 거의 비슷하지만 deep neural network에서 사용되는 notation을 한 번 더 확인하고 넘어가자.두 번째 layer와 관련된 항들의 차원을 표시해보면 아래와 같다.$z^{[2]} = W^{[2]} a^{[1]} + b^{[2]}$$(5,1) = (5,3) (3,1) + (5,1)$ 일반화하면 아래와 같이 쓸 수 있다.$W^{[l]} : (n^{[l]}, n^{[n-1]})$$b^{[l]} : (n^{[l]},1)$ 아래 그림은 순전파와 역전파의 과정을 한 눈에 보여주는 다이어그램이다.마지막으로 파이토치를 사용해 deep neural network를 ..

CS/딥러닝 2026.03.30

[딥러닝] 3. multi layer network에서의 gradient 계산과 차원

[딥러닝] 2. Shallow Neural Network / Activation function [딥러닝] 2. Shallow Neural Network / Activation functionNeural Network 이전 글에서 알아봤던 logistic regression을 아래처럼 표시해보자.이런 작은 층을 여러 개 쌓으면 Neural Network가 된다.대괄호 [ ] 는 층을 얘기한다.computation graph를 그리면 아래와 같다. 보april2901.tistory.com 이번 글에서는 이전 글들에서 계속 다뤘던 두 개의 층을 가진 신경망에서 역전파를 사용해 gradient를 계산해보자. 먼저 각 층의 unit의 개수를 각각 $n^{[0]}, n^{[1]}, n^{[2]}$라고 하자.그러..

CS/딥러닝 2026.03.25

[딥러닝] 2. Shallow Neural Network / Activation function

Neural Network 이전 글에서 알아봤던 logistic regression을 아래처럼 표시해보자.이런 작은 층을 여러 개 쌓으면 Neural Network가 된다.대괄호 [ ] 는 층을 얘기한다.computation graph를 그리면 아래와 같다. 보통 입력층은 빼고 네트워크가 몇 층인지를 애기한다.따라서 아래의 그림에서는 깊이 2짜리 네트워크가 된다.아래처럼 3개의 입력(3차원)이 있다고 가정해보자.$a^{[1]}_1$같은 표현에서 지수 위치의 [ ]는 층을, 아래첨자는 각 노드의 값을 얘기한다. input layer에서 hidden layer로 넘어갈 때,각 입력들에게 가중치가 한 세트씩 곱해져 hidden layer의 각각의 노드에 들어간다.이 경우 한 세트는 3개의 가중치 값들로 이루어..

CS/딥러닝 2026.03.19

[딥러닝] 1. Logistic Regression

Logistic Regression에 대해 알아보자. Binary CalssificationLogistic Regression이 사용되는 대표적인 문제 중 하나인 Binary Calssification을 알아보자.두 개의 카테고리 중 어느 것에 속하는지를 분류하는 문제를 얘기한다.어떤 이미지가 고양이를 포함하는지 아닌지 파악하는 task가 있다고 하자.이 task는 이미지를 입력으로 받아 출력으로 고양이가 있을 확률을 출력한다.내부적으로는 확률이지만 최종적으로는 특정 임계값을 기준으로 이 값보다 크면 1로, 작으면 0으로 취급해서 결과를 얘기할 때도 있다. 입력인 이미지는 색깔이 있는 이미지일 경우 아래처럼 RGB채널별로 값이 있을 것이다.이 각 픽셀의 값들을 한줄로, 1차원으로 만들어 입력으로 사용한다..

CS/딥러닝 2026.03.11

[컴파일러 이론] 14. Instruction Scheduling

명령어(instruction)의 순서를 바꿔 성능을 더 좋게 만들 수 있는 경우가 있다.이번 글은 명령어 스케줄링을 알아보자. 순서를 바꾸더라도 기능이 달라지면 안된다.순서를 마음대로는 바꿀 수 없고, dependency 때문에 제약이 발생한다. 어떤 명령어를 옮겨야 하드웨어적으로 성능이 좋을까?옮겨도 기능적으로 문제가 없을까? 이 두가지를 고려해야한다. 컴퓨터 구조론을 학습했다면 아래 그림이 어느정도 익숙할 것이다. 코드를 짤 때 하나씩 실행될 것이라고 생각하고 짜지만,실제로 명령어는 여러 명령어에 대해 병렬 실행이 된다.이렇게 cpu의 병렬 구조에 맞는 스케줄링을 해야한다. 또는 동시에 같은 레지스터에 값을 쓰는 것도 불가능하다.이런 식으로 여러가지 동시에 실행이 불가능한 경우들이 있다. 따라서 co..

CS/컴파일러 2026.01.11

[컴파일러 이론] 13. Memory Allocation

메모리의 구조를 다시 간단히 정리해보자. 메모리 안에 code와 data가 같이 저장되어있다.data의 stack부분을 자세히 보면 이전에 알아봤던 AR을 단위로 저장된다.stack과 code 사이에는 static data를 저장하는 공간도 있다.프로그램 동작 중에 동적으로 생성되는 것들은 heap에 저장된다. C, C++ 코딩 시에 메모리 free 등을 안해서 에러가 났던 경험이 한번씩 있을 것이다.java,python 같은 언어는 garbage collection이라는 기능이 있어 알아서 이런 부분을 처리해준다.이렇게 자동으로 메모리를 관리해주는 법을 알아보자.Object Reachability유저가 free를 명시적으로 하지 않았을 때, 언제부터 이게 정말로 필요하지 않을지 판단해야한다.아래 그림에..

CS/컴파일러 2026.01.06

[컴파일러 이론] 12. register allocation

register와 memoryCPU에서 어떤 값들을 저장하는 용도로 register와 memory가 있다.컴퓨터 구조론에서도 나오는 내용이지만 간단히 정리해보자. 먼저 CPU에서 연산을 할 때는 register의 내용을 사용한다.따라서 memory에 있는 내용은 먼저 register로 올린 후에 연산이 가능하다. memory 보다 register가 훨씬 빠른데, 대신 그만큼 용량은 적다.register allocation이전 글에서 IR에 대해 잠시 얘기했었다. 이때 기본적으로 깔려있는 가정이 있는데,"IR은 무한한 register를 가지고 있다" 그러나 실제로는 당연히 register의 개수에 8~16개 정도로 제한이 있는데, 이 글에서는 이것과 관련해 알아보자. 우리가 이론적으로 다뤘던 registe..

CS/컴파일러 2026.01.04

[컴파일러 이론] 11. Control Flow Analysis - Dominator, Natural Loop, Code Motion

저번 글에서 dataflow analysis 를 알아봤었다.이번에는 프로그램의 분기 구조를 분석하는 control flow analysis를 알아보자. Dominator이전 글에서 CFG는 BB를 노드로 가지는 그래프라고 했었다.Entry 부터 어떤 노드 y까지 갈 수 있는 모든 길에 x노드가 있다면 x가 y를 dominate한다고 말한다.이 dominator에는 3가지 속성이 있다.1. 모든 BB는 자기자신을 dominate한다.2. x가 y를 dominate하고 y가 z를 dominate하면 x가 z도 dominate한다.3. x와 y가 둘다 z를 dominate하면, x와 y사이 dominate관계가 있다. Dominator TreeBB간의 dominate관계를 그래프로 나타낸 것이다. Domina..

CS/컴파일러 2026.01.02