본문 바로가기
반응형

머신러닝9

EM 알고리즘의 ascent property에 대하여 - Optimization with R 이전 포스팅에서는 EM 알고리즘에 대하여 간략한 예제를 통하여 알아보았다. 이번 포스팅에서는 EM 알고리즘이 작동하는 원리에 대하여 살짝 이해해보는 시간을 갖도록 하자. 전 포스팅에서 알아보았듯, 결국 EM 알고리즘은 E step과 M step을 반복 함으로써 우도 함수를 최대화시키는 방법이다. 자연스럽게 떠오르는 질문은 ‘항상 이러한 방법을 사용하면 우도 함수를 최대로 만드는 모수를 찾을 수 있을까?’ 일 것이다. 이러한 질문의 완벽한 대답은 되지 않지만, EM 알고리즘의 Path는 이번 포스팅에서 다룰 아주 좋은 성질을 가지고 있다. Ascent property of EM algorithm EM 알고리즘을 사용해서 우리는 모수의 값을 계속 업데이트 해 나아간다. 이렇게 업데이트된 모수는 우리가 최대화.. 2023. 4. 5.
9강. Torch의 Dataset과 Dataloader 클래스에 대하여 이번 챕터에서는 실제 딥러닝을 사용하여 모델링을 할 때 사용될 데이터를 어떻게 torch에 넣을수 있는지에 대하여 알아보자. 이 과정에서 우리가 알아야하는 클래스가 두개가 있는데, 바로 Dataset 클래스와 Dataloader 클래스이다. 예제 데이터 언제나 그렇듯, 본 공략집은 예제를 통해서 설명하는 것을 선호한다. 이번 챕터에서는 가상의 학생들의 공부시간과 연습한 문제 갯수, 그리고 시험의 합격 여부에 대한 자료를 만들어보았다. 아래 그림에서 볼 수 있듯이 공부 시간과 연습한 문제 갯수에 따라서 두 그룹으로 비교적 잘 나뉘어져 있다는 것을 알 수 있다. library(torch) library(tidyverse) set.seed(2021) # 독립변수 발생 x1 2021. 11. 8.
7강. torch_nn 모듈로 첫 신경망 정의하기 이제까지 torch의 자동 미분(auto grad) 기능과 순전파(forward propagation)에 대하여 알아보았다. 오늘은 드디어, torch 라이브러리에서 제공하는 함수들을 이용해서 순전파 챕터에서 텐서로 일일이 정의했던 기본 신경망을 라이브러리 함수를 통하여 만들어 보도록 하자. 딥러닝 라이브러리에서 제공하는 코드를 통하여 신경망을 정의하는 코드가 어떻게 간단해지는지 느껴보았으면 한다. 신경망 정의 (Custom nn Modules) 토치를 사용해서 신경망을 정의할 때 사용하는 함수가 있다. 바로 nn_module()이라는 함수인데, torch에서 신경망을 정의할 때, 이 함수를 사용해서 “클래스”를 만들어 정의한다! 왜 우리가 챕터 @ref(r6)에서 R6관련 클래스 내용을 그렇게도 공부했.. 2021. 11. 8.
6강. 미분 자동추적 기능 (Autograd) 에 대하여 이번 장에서는 torch 및 다른 딥러닝 라이브러리의 근본을 이루는 기능인 미분 자동 추적 기능에 대하여 알아보도록 하자. 예를 들어 설명하는 것을 좋아하므로, 이번 챕터에 쓸 예제 함수를 먼저 정의하자. 예제 함수 \(n\)개의 데이터 \(x_1, ..., x_n\)이 주어졌다고 할 때, 우리는 다음의 함수 \(f\)를 정의 할 수 있다. \[ f(\mu) = \frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^2 \] 위의 함수는 다음과 같이 해석해 볼 수 있다. \(x\) 데이터에 담겨있는 정보를 단 하나의 지표 \(\mu\)로 압축해서 나타낸다고 할 때, 함수 \(f\)는 각 관찰값에 대한 오차들, \(x_i - \mu\),의 제곱의 평균을 나타낸다. 통계학에서는 나름 유명한 함수인.. 2021. 11. 8.
신경망과 회귀분석 비교하기 (Neural Net vs. Regression) 저번 시간 우리는 파이토치에서 신경망을 정의하는 방법에 대하여 알아보았다. 오늘은 정의한 신경망을 어떻게 학습하는가에 대하여 알아보도록 하자. 오늘 우리의 목표는 다음과 같다. 정의된 신경망의 학습 방법 알기 Activation function에 따른 학습차이 비교 옵티마이져에 따른 학습차이 비교 히든 레이어 노드 갯수에 따른 학습차이 비교 위의 효과들을 알아보기 위하여 필자가 만든 학생들의 중간, 기말고사 데이터에 적용된 회귀분석 모델과의 비교를 시도하겠다. 학습 준비 - 데이터 import 이번 포스트에서는 필자가 만들어놓은 가상 데이터를 간단히 설명하면 다음과 같다. 30명 학생들의 정보가 들어있는 데이터이고, id, 성별, 중간고사, 기말고사 성적이 들어있는 데이터이다. 필자의 R을 사용한 통계학.. 2020. 7. 22.
Forward propagation, R 버전 오늘은 뉴럴 넷 (Neural network)을 공부하기 위해서 앞으로 우리가 다룰 뉴럴넷 중 가장 현실적이고, 어떤 일이 벌어지고 있는지 상상이 가능한 뉴럴 넷을 정의하는 것을 목표로 하자. 우리가 오늘 예로 생각할 뉴럴 넷은 다음과 같다. 2단 레이어이고, 2개의 녹색 노드(node)는 input 레이어를 형성하고 있고, 빨강색의 노드는 output 레이어를 형성하고 있으며, 회색의 3개 노드는 히든 레이어를 형성한다. 자 이제부터, 녹색 노드에는 무엇이 들어가는지, 그리고, 어떤 과정을 거쳐서 빨강색의 값이 나오는지에 대하여 알아보자. 이러한 전 과정을 Forward propagation이라고 부른다. propagation의 뜻은 증식, 혹은 번식인데, 식물이나 동물이 자라나는 것을 의미하는데, 녹.. 2020. 7. 17.
R과 파이토치, 텐서의 변환 (Bridge) 시작부터 이름이 거창하다. 그렇다. 필자가 썸네일로 밀고있는, 그리고 이 시리즈의 존재 이유를 설명하는 포스트다. 태생이 R로 시작해서 그런지 R에 대한 미련을 버릴 수가 없는것 같다. 또한 문서를 작성할 때, R에 대한 의존도가 상당히 높아서 포기가 안됨. PytoRch = Pytorch + R R에서는 Python과의 연동을 위하여 reticulate 이라는 패키지를 제공한다. 이 reticulate을 사용하여 파이썬에서 정의되어 있는 변수들을 R로 불러올 수 있는데, 파이토치에서는 넘파이와의 브릿지 (bridge)를 제공하고 있으니, 필자가 생각하는 R의 강점인 문서작성과 데이터 시각화는 R에서, 딥러닝에서 요구하는 GPU를 이용한 계산은 파이썬에서 하려는 나름 야심찬 계획이 있다. 파이토치 넘파이.. 2020. 7. 15.
파이토치, 텐서 (Tensor) 의 연산 지난 시간, 우리는 텐서가 행렬 혹은 Array의 다른 이름이라는 것을 배웠다. 오늘은 행렬들의 연산에 대하여 다루어보자. 파이토치 (Pytorch) 불러오기 및 행렬 선언 import torch 이번 튜토리얼에서 사용할 텐서들을 만들어보자. torch.manual_seed(1234) ## A = torch.arange(1.0, 13.0).view(4, 3) B = torch.rand(4, 3) C = torch.rand(3, 4) A; B; C ## tensor([[ 1., 2., 3.], ## [ 4., 5., 6.], ## [ 7., 8., 9.], ## [10., 11., 12.]]) ## tensor([[0.0290, 0.4019, 0.2598], ## [0.3666, 0.0583, 0.7006.. 2020. 7. 15.
파이토치, 텐서 (Tensor) 만들기 오늘부터 파이토치를 한 번 파보도록 하겠다. 파이토치 (Pytorch) 불러오기 파이토치의 모토은 GPU 파워가 발달한 지금 기존에 사용되던 넘파이 (NumPy) 를 대체하기 위해서 태어났다. 파이토치 역시 결국 넘파이나 판다스 (Pandas) 같은 패키지 임으로 다음의 명령어를 사용하여 불러온다. import torch 텐서 선언 텐서가 무엇이냐, 겁나 대단한 것처럼 보이나 결국 Array임. 우리가 많이 쓰는 행렬도 Array에 속하지만, 보통 Array라는 용어는 3차원 이상의 행렬을 암시한다. 이름부터 멋있는 파이토치인데 다른 용어들이 Array같이 다른 패키지에서 사용되는 것들이랑 동일하면 격이 떨어지므로, 텐서 (tensor) 라고 붙였다. 파이토치 설명서에 쓰면 텐서는 넘파이의 Array와 .. 2020. 7. 15.
반응형