인공지능 28

파이토치(PyTorch) 기초 한 번에 part2

해당 글은 이수안 컴퓨터 연구소의 파이토치 한번에 끝내기 PyTorch Full Tutorial Course 의 강의 자료를 정리한 글입니다. Autograd(자동미분) torch.autograd 패키지는 Tensor의 모든 연산에 대해 자동 미분 제공 이는 코드를 어떻게 작성하여 실행하느냐에 따라 역전파가 정의된다는 뜻 backprop를 위해 미분값을 자동으로 계산 requires_grad 속성을 True로 설정하면, 해당 텐서에서 이루어지는 모든 연산들을 추적하기 시작 기록을 추적하는 것을 중단하게 하려면, .detach()를 호출하여 연산기록으로부터 분리 기본적으로 텐서는 requires_grad를 False로 가지고 있다. requires_grad_(...)는 기존 텐서의 requires_grad..

파이토치(PyTorch) 기초 한 번에 part1

해당 글은 이수안 컴퓨터 연구소의 파이토치 한번에 끝내기 PyTorch Full Tutorial Course 의 강의 자료를 정리한 글입니다. 파이토치(PyTorch)란 페이스북이 초기 루아(Lua) 언어로 개발된 토치(Torch)를 파이썬 버전으로 개발하여 2017년도에 공개 초기에 토치(Torch)는 넘파이(NumPy) 라이브러리처럼 과학 연산을 위한 라이브러리로 공개 이후 GPU를 이용한 텐서 조작 및 동적 신경망 구축이 가능하도록 딥러닝 프레임워크로 발전시킴 파이썬답게 만들어졌고, 유연하면서도 가속화된 계산 속도를 제공 파이토치의 구성요소 torch: 메인 네임스페이스, 텐서 등의 다양한 수학 함수가 포함 torch.autograd: 자동 미분 기능을 제공하는 라이브러리 torch.nn: 신경망 ..

[논문리뷰] Transformer (Attention Is All You Need)

해당 글은 wikidocs의 16 - 01 트랜스포머(Transformer)에 대한 글을 정리한 글입니다. 기존 Seq2Seq 모델의 한계Seq2Seq2 모델은 위와 같은 모습을 가진다. 인코더 파트에서는 입력 문장의 모든 단어들을 순차적으로 입력받고, 마지막에 단어들로부터 얻은 모든 정보들을 압축해서 하나의 벡터로 만든다. 이 벡터를 컨텍스트 벡터(Context Vector)라 부른다. 이 Context Vector는 입력 문장에 대한 문맥적인 정보를 담게 되는데 디코더는 해당 벡터를 받아 번역된 단어를 한 개씩 순차적으로 출력한다. 한 단어에 대한 계산은 앞에 단어에 대한 계산이 끝나야 가능하니 정보의 흐름에 병목 현상(Bottleneck)이 일어날 수 있다는 문제점이 있다. 입력 문장의 길이가 짧던..

배치 정규화(Batch Normalization)

Normalizing training sets신경망의 훈련을 빠르게 할 수 있는 하나의 방법중에 입력으로 들어오는 Feature들을 정규화(Normalizing)이 있다. 위의 표는 두 개의 입력 특성을 가진 훈련 데이터 세트의 분포(산포도)를 나타낸 표다. 두 단계에 따라서 입력을 정규화한다. 1). 데이터 세트의 평균을 0으로 만든다.μ = 1/m 곱하기 1부터 m까지 $x^{(i)}$의 합으로 평균값을 나타내는 벡터다.x는 그럼 모든 훈련 데이터에 대해서 x-μ로 설정된다. (원래 값에서 평균값을 빼주는 것)0의 평균을 갖게 될 때까지 훈련 세트를 이동한다. 2). 분산을 정규화한다. 아직 특성 x1이 x2보다 더 큰 분포도를 가지니, 이 둘을 맞춰주기 위해 분산을 정규화한다.$σ^2$ = 1/m ..

Feature Scaling (ft. 입력 특성 정규화하기)

해당 글은 유튜브 채널(https://www.youtube.com/@Deeplearningai) 의 Machine Learning강의를 정리한 글입니다.  집의 크기와, 방의 개수에 따라 집의 가격을 예측하는 다중 선형 회귀 모델이다. 집의 사이즈의 범위는 방의 개수의 범위보다는 훨씬 클 것이다. 예로 집의 사이즈 범위를 300~2000, 방의 개수의 범위를 0~5라 친다면 큰 가중치를 작은 피처값에 적용하는 것이 합리적일 것이다.  하나의 데이터 샘플을 가지고 가중치를 줘보자. [ $x_1 = 2000, x_2 = 5, 집의 가격 = $500k$ ]하단의 왼쪽 식이 큰 가중치 $w_1$값을 큰 피처값 $x_1$에 부여한 경우다. 최종값이 너무 커져버러셔 실제 집의 가격(500k 달러)와 차이가 너무 크..

최적화 알고리즘 (ft. Momentum, RMSprop, Adam)

경사 하강법보다 빠른 몇 가지 최적화 알고리즘이 존재한다. 그 알고리즘들을 이해하기 위해서는 먼저 지수 가중 평균(Exponentially weighted averages)을 이해해야한다지수 가중 평균에 대한 글은 아래 글을 참조해주세요. 지수 가중 평균(Exponentially weighted averages)해당 글은 유뷰트 채널(https://www.youtube.com/@Deeplearningai) 의 Improving Deep Neural Networks 강의를 정리한 글입니다. Exponentially weighted averages(지수 가중 평균) 경사 하강법보다 빠른 몇 가지 최적화 알고리bruders.tistory.com Gradient descent with momentum모멘텀 알고..

지수 가중 평균(Exponentially weighted averages)

해당 글은 유튜브 채널(https://www.youtube.com/@Deeplearningai) 의 Improving Deep Neural Networks 강의를 정리한 글입니다. Exponentially weighted averages(지수 가중 평균)경사 하강법보다 빠른 몇 가지 최적화 알고리즘이 존재한다. 그 알고리즘들을 이해하기 위해서는 먼저 지수 가중 평균(Exponentially weighted averages)을 이해해야한다.  (통계학에서는 지수 가중 이동 평균이라고도 부른다.)지수 가중 평균(=지수 이동 평균)이란, 데이터의 이동 평균을 구할 때, 오래된 데이터가 미치는 영향을 지수적으로 감쇠(exponential decay) 하도록 만들어 주는 방법이다.  지수 가중 평균의 예위의 그래..

경사하강법의 세 종류(BGD, SGD, MGD)

경사하강법(Gradient Descent Algorithm)경사 하강법은 최적화 알고리즘 중 하나로, 손실 함수(Loss Function)의 값을 최소화하는 파라미터[가중치(weight)와 편향(bias)]를 구하기 위해 손실함수에 대한 각 매개변수의 기울기(Gradient)를 이용하는 방법이다.이 때 기울기가 0인 지점인 손실함수의 값이 최저인 곳이므로 그 지점에 도달하기위해 매개변수는 기울기의 반대방향으로 움직여야 한다. 그래서 경사하강법에서 미분값의 -만큼 빼주는 값으로 가중치를 업데이트하는 것이다.위에선 예시로 가중치에 대해서만 얘기했으나 다른 매개변수인 편향(Bias)에 대해서도 동일하게 적용된다. 결국 최적해에 도달할때까지 매개변수 업데이트를 반복(Iteration)하는 것인데 하나의 반복에서..

풀링(Pooling) ft. Max & Average Pooling

합성곱 신경망에서 합성곱 연산과 활성화 함수 ReLU로 이루어진 합성곱층 다음에는 보통 풀링층이 존재한다. 풀링층은 각 특징맵에서 독립적으로 작동한다. 풀링은 특징 맵의 높이와 너비를 줄임으로써 특징 맵의 해상도를 낮추지만 분류에 필요한 맵의 특징은 유지시키는데 이를 다운 샘플링(Down-sampling)이라고 한다. 풀링층을 사용하는 이유 : 표현의 공간 크기를 점진적으로 줄여 네트워크의 매개변수 및 계산량을 줄이고 과적합을 제어할 수 있다. 최대 풀링(Max Pooling) 풀링에서 사용하는 일반적인 방법은 최대값을 추출하는 위와 같은 맥스 풀링이다. 필터와 겹치는 영역안에서 최대값만을 추출한다. 위의 예시는 2 x 2 의 필터로 4 x 4 의 크기를 가진 입력이미지에 스트라이드 = 2를 적용했을 때..

합성곱 신경망(Convolution Neural Network)

지난번에 다수의 필터를 사용한 합성곱 연산의 예시를 보았다. 사실 각 필터마다 나온 결과 특성맵이 쌓이기 전 각 특성맵들은 Relu 함수를 거친 다음에 합쳐진다. 즉 하나의 합성곱층은 합성곱의 연산으로만 이루어진 것이 아니라 Relu 함수인 활성화함수 이렇게 두가지로 이루어져있다. 합성곱 신경망의 한 계층(합성곱층)을 위의 예시로 구성해보자. 1). 입력 데이터를 필터와 합성곱 연산한다. (결과: 4 x 4) 2). 그 각각의 결과에 편향(+ b[실수])을 더해준다. 편향 ‘b’는 하나의 실수지만 파이썬의 브로드캐스팅을 통해서 4 x 4 행렬에 맞게 16 개의 요소에 동일한 수를 더해주어 행렬과의 계산이 가능하게 해준다. 4). 편향을 더 해준 그 값에 비선형성(활성화함수로 ReLU 사용)을 적용해준다...