{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 05wk-1: 깊은 신경망 (4) – GPU 사용법, SGD, Softmax와 CrossEntropy\n",
"\n",
"최규빈 \n",
"2024-04-01\n",
"\n",
"
\n",
"\n",
"# 1. 강의영상\n",
"\n",
"\n",
"\n",
"# 2. Imports"
],
"id": "768a7fcd-ffbe-4e29-b177-eea61c25a345"
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import torch\n",
"import matplotlib.pyplot as plt\n",
"import torchvision\n",
"import fastai.data.all "
],
"id": "a84306e3-564a-472e-ae0a-5322379da476"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3. CPU vs GPU\n",
"\n",
"`-` 파이토치에서 GPU를 쓰는 방법을 알아보자. (사실 지금까지 우리는 CPU만\n",
"쓰고 있었음)\n",
"\n",
"`-` 코랩에서 GPU설정하는 방법: (아래영상참고)\n",
"\n",
"\n",
"\n",
"## A. GPU 사용방법\n",
"\n",
"`-` cpu 연산이 가능한 메모리에 데이터 저장"
],
"id": "d14b6264-14f6-48a8-bbb7-8b0b9c84bbb8"
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(43052)\n",
"x_cpu = torch.tensor([0.0,0.1,0.2]).reshape(-1,1) \n",
"y_cpu = torch.tensor([0.0,0.2,0.4]).reshape(-1,1) \n",
"net_cpu = torch.nn.Linear(1,1) "
],
"id": "3d54e22e-e238-4206-a7b6-ad0a42ea3048"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` gpu 연산이 가능한 메모리에 데이터 저장"
],
"id": "e4a693ae-3042-4461-aece-f4d27a27345a"
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Mon Apr 1 16:42:53 2024 \n",
"+---------------------------------------------------------------------------------------+\n",
"| NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 |\n",
"|-----------------------------------------+----------------------+----------------------+\n",
"| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
"| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n",
"| | | MIG M. |\n",
"|=========================================+======================+======================|\n",
"| 0 NVIDIA GeForce RTX 3090 Off | 00000000:09:00.0 Off | N/A |\n",
"| 0% 35C P8 34W / 420W | 26MiB / 24576MiB | 0% Default |\n",
"| | | N/A |\n",
"+-----------------------------------------+----------------------+----------------------+\n",
" \n",
"+---------------------------------------------------------------------------------------+\n",
"| Processes: |\n",
"| GPU GI CI PID Type Process name GPU Memory |\n",
"| ID ID Usage |\n",
"|=======================================================================================|\n",
"| 0 N/A N/A 1130 G /usr/lib/xorg/Xorg 9MiB |\n",
"| 0 N/A N/A 1209 G /usr/bin/gnome-shell 8MiB |\n",
"+---------------------------------------------------------------------------------------+"
]
}
],
"source": [
"!nvidia-smi # before"
],
"id": "91fc404a-ec68-4306-8c44-10f453373da7"
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(43052)\n",
"x_gpu = x_cpu.to(\"cuda:0\")\n",
"y_gpu = y_cpu.to(\"cuda:0\")\n",
"net_gpu = torch.nn.Linear(1,1).to(\"cuda:0\") "
],
"id": "f22b2e9c-9e14-4ad2-84ef-8885ffcea830"
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Mon Apr 1 16:42:53 2024 \n",
"+---------------------------------------------------------------------------------------+\n",
"| NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 |\n",
"|-----------------------------------------+----------------------+----------------------+\n",
"| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
"| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n",
"| | | MIG M. |\n",
"|=========================================+======================+======================|\n",
"| 0 NVIDIA GeForce RTX 3090 Off | 00000000:09:00.0 Off | N/A |\n",
"| 0% 37C P2 39W / 420W | 287MiB / 24576MiB | 2% Default |\n",
"| | | N/A |\n",
"+-----------------------------------------+----------------------+----------------------+\n",
" \n",
"+---------------------------------------------------------------------------------------+\n",
"| Processes: |\n",
"| GPU GI CI PID Type Process name GPU Memory |\n",
"| ID ID Usage |\n",
"|=======================================================================================|\n",
"| 0 N/A N/A 1130 G /usr/lib/xorg/Xorg 9MiB |\n",
"| 0 N/A N/A 1209 G /usr/bin/gnome-shell 8MiB |\n",
"| 0 N/A N/A 362478 C ...b3/anaconda3/envs/dl2024/bin/python 256MiB |\n",
"+---------------------------------------------------------------------------------------+"
]
}
],
"source": [
"!nvidia-smi"
],
"id": "9601e845-9a4b-4bec-9053-879be0749db5"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> GPU에 메모리를 올리면 GPU메모리가 점유된다! (26MiB -\\> 287MiB)\n",
"\n",
"`-` cpu 혹은 gpu 연산이 가능한 메모리에 저장된 값들을 확인"
],
"id": "0c6492ec-b155-44fb-9692-2d2d3b145211"
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"x_cpu, y_cpu, net_cpu.weight, net_cpu.bias"
],
"id": "4ed37ca9-745f-4e78-bea6-c17993c9fcc5"
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"x_gpu, y_gpu, net_gpu.weight, net_gpu.bias"
],
"id": "ae7cb375-73ca-4bdd-a290-ecedfc2bf7c0"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` gpu는 gpu끼리 연산가능하고 cpu는 cpu끼리 연산가능함\n",
"\n",
"(예시1)"
],
"id": "5a71440f-e069-407c-961d-41656e10fb6f"
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net_cpu(x_cpu) "
],
"id": "9843f929-e8e0-46b3-a799-c99ba1e46fa3"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시2)"
],
"id": "0354350d-f1d5-4e10-9cdf-36791893d21a"
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net_gpu(x_gpu) "
],
"id": "16bdd165-cb2c-4c9b-9d16-e03c2346f273"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시3)"
],
"id": "d1b62022-e0c3-4017-9c55-f0122d1c00c0"
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net_cpu(x_gpu) "
],
"id": "97bae322-4185-43e4-92c2-8b3229153934"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> **강의중 net을 재선언한 이유**\n",
">\n",
"> `-` 아래와 같이 `x_cpu` 혹은 `y_cpu`에 `.to(\"cuda:0\")`메소드를 쓸 경우\n",
">\n",
"> ``` python\n",
"> x_cpu.to(\"cuda:0\")\n",
"> y_cpu.to(\"cuda:0\")\n",
"> ```\n",
">\n",
"> `x_cpu`와 `y_cpu`는 cpu에 그대로 있음.\n",
">\n",
"> `-` 그런데 아래와 같이 `net_cpu`에서 `.to(\"cuda:0\")`메소드를 쓸 경우\n",
">\n",
"> ``` python\n",
"> net_cpu.to(\"cuda:0\")\n",
"> ```\n",
">\n",
"> `net_cpu` 자체가 gpu에 올라가게 됨.\n",
"\n",
"(예시4)"
],
"id": "d17004a4-87ef-49d1-b2a2-966f7da931b2"
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net_gpu(x_cpu)"
],
"id": "e25a3a7a-bc4e-4007-83cb-d2f8c3f9a4fe"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시5)"
],
"id": "396a60ef-daeb-412a-a450-a9384cb2eb88"
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.mean((y_cpu-net_cpu(x_cpu))**2)"
],
"id": "63858552-cc37-453f-8cf8-cac3d3d267c2"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시6)"
],
"id": "65f6200a-096b-4c70-8771-44211d9ec0db"
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.mean((y_gpu-net_gpu(x_gpu))**2)"
],
"id": "72472217-0944-4268-8a3f-6bee4b8c8b29"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시7)"
],
"id": "551189f9-ae8f-4f39-b391-3cf142ee9504"
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.mean((y_gpu-net_cpu(x_cpu))**2)"
],
"id": "6bc92139-3108-47c5-89b1-b01266c9d19c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시8)"
],
"id": "2aeef689-e89e-45f3-83bf-eb1d8276d4a4"
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.mean((y_cpu-net_gpu(x_gpu))**2)"
],
"id": "07158f86-6034-411e-8530-633758eaad34"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. 시간측정 (예비학습)"
],
"id": "a650368b-4aa6-486c-8ecb-b49d51b185a9"
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import time "
],
"id": "a19a108c-fa7a-411d-8a3e-67d40fe149aa"
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"t1 = time.time()"
],
"id": "adbdf1cd-a97a-44aa-93f1-fe3fa2b3c76f"
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"t2 = time.time()"
],
"id": "436f27b7"
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"t2-t1"
],
"id": "05d8cc30"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## C. CPU vs GPU (512 nodes)\n",
"\n",
"`-` CPU (512 nodes)"
],
"id": "d66e70cf-9b69-4880-b9ed-0835a565a396"
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(5) \n",
"x=torch.linspace(0,1,100).reshape(-1,1)\n",
"y=torch.randn(100).reshape(-1,1)*0.01\n",
"#---#\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(1,512),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(512,1)\n",
")\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"#---#\n",
"t1 = time.time()\n",
"for epoc in range(1000):\n",
" # 1 \n",
" yhat = net(x)\n",
" # 2 \n",
" loss = loss_fn(yhat,y)\n",
" # 3 \n",
" loss.backward()\n",
" # 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"t2 = time.time()\n",
"t2-t1"
],
"id": "8f6b1282"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` GPU (512 nodes)"
],
"id": "6c130036-53ad-47bc-b171-109d318e6bb5"
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(5) \n",
"x=torch.linspace(0,1,100).reshape(-1,1).to(\"cuda:0\")\n",
"y=(torch.randn(100).reshape(-1,1)*0.01).to(\"cuda:0\")\n",
"#---#\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(1,512),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(512,1)\n",
").to(\"cuda:0\")\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"#---#\n",
"t1 = time.time()\n",
"for epoc in range(1000):\n",
" # 1 \n",
" yhat = net(x)\n",
" # 2 \n",
" loss = loss_fn(yhat,y)\n",
" # 3 \n",
" loss.backward()\n",
" # 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"t2 = time.time()\n",
"t2-t1"
],
"id": "8c5300c6"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- CPU가 더 빠르다??\n",
"\n",
"## D. CPU vs GPU (20,480 nodes)\n",
"\n",
"`-` CPU (20,480)"
],
"id": "fee87ffb-82df-4b0c-9338-2b55c363e5d9"
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(5) \n",
"x=torch.linspace(0,1,100).reshape(-1,1)\n",
"y=torch.randn(100).reshape(-1,1)*0.01\n",
"#---#\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(1,20480),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(20480,1)\n",
")\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"#---#\n",
"t1 = time.time()\n",
"for epoc in range(1000):\n",
" # 1 \n",
" yhat = net(x)\n",
" # 2 \n",
" loss = loss_fn(yhat,y)\n",
" # 3 \n",
" loss.backward()\n",
" # 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"t2 = time.time()\n",
"t2-t1"
],
"id": "a35ebfb0"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` GPU (20,480)"
],
"id": "36bc4e86-3050-46f6-87bd-9f9ea66469f1"
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(5) \n",
"x=torch.linspace(0,1,100).reshape(-1,1).to(\"cuda:0\")\n",
"y=(torch.randn(100).reshape(-1,1)*0.01).to(\"cuda:0\")\n",
"#---#\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(1,20480),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(20480,1)\n",
").to(\"cuda:0\")\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"#---#\n",
"t1 = time.time()\n",
"for epoc in range(1000):\n",
" # 1 \n",
" yhat = net(x)\n",
" # 2 \n",
" loss = loss_fn(yhat,y)\n",
" # 3 \n",
" loss.backward()\n",
" # 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"t2 = time.time()\n",
"t2-t1"
],
"id": "4632bc05"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 왜 이런 차이가 나는가?\n",
"- 연산을 하는 주체는 코어인데 CPU는 수는 적지만 일을 잘하는 코어들을\n",
" 가지고 있고 GPU는 일은 못하지만 다수의 코어를 가지고 있기 때문\n",
"\n",
"## E. CPU vs GPU (204,800 nodes)\n",
"\n",
"`-` CPU (204,800)"
],
"id": "c384dd53-4b4e-4262-81df-d8ee55c117cb"
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(5) \n",
"x=torch.linspace(0,1,100).reshape(-1,1)\n",
"y=torch.randn(100).reshape(-1,1)*0.01\n",
"#---#\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(1,204800),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(204800,1)\n",
")\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"#---#\n",
"t1 = time.time()\n",
"for epoc in range(1000):\n",
" # 1 \n",
" yhat = net(x)\n",
" # 2 \n",
" loss = loss_fn(yhat,y)\n",
" # 3 \n",
" loss.backward()\n",
" # 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"t2 = time.time()\n",
"t2-t1"
],
"id": "2567de51"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` GPU (204,800)"
],
"id": "db5bb21e-6378-4cf5-be0e-d179c36f55d2"
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.manual_seed(5) \n",
"x=torch.linspace(0,1,100).reshape(-1,1).to(\"cuda:0\")\n",
"y=(torch.randn(100).reshape(-1,1)*0.01).to(\"cuda:0\")\n",
"#---#\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(1,204800),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(204800,1)\n",
").to(\"cuda:0\")\n",
"loss_fn = torch.nn.MSELoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"#---#\n",
"t1 = time.time()\n",
"for epoc in range(1000):\n",
" # 1 \n",
" yhat = net(x)\n",
" # 2 \n",
" loss = loss_fn(yhat,y)\n",
" # 3 \n",
" loss.backward()\n",
" # 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"t2 = time.time()\n",
"t2-t1"
],
"id": "a76da7ec"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 4. “확률적” 경사하강법\n",
"\n",
"## A. 의문: 좀 이상하지 않아요?\n",
"\n",
"`-` 국민상식: GPU 비싸요..\n",
"\n",
"\n",
"- GPU 메모리 많아봐야 24GB, 그래도 비싸요..\n",
" \n",
"- GPU 메모리가 80GB일 경우 가격:\n",
" \n",
"\n",
"`-` 우리가 분석하는 데이터: 빅데이터..?"
],
"id": "6779f82c-24e9-4e17-805d-821364e5ad4a"
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"x = torch.linspace(-10,10,100000).reshape(-1,1)\n",
"eps = torch.randn(100000).reshape(-1,1)\n",
"y = x*2 + eps "
],
"id": "7c0e8920-2867-49f5-bb5c-7d88f7ebf771"
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\nTGZWX3s+kPtb+A73e5T7W/gO93s83O8P5u4elVJUKhX6+vrQ9ZlXpSz4kRVd11m8ePGcXiOTyRy2\nP4Qg93c4ONzvUe5v4Tvc7/Fwvz+Ym3t8rRGV3WSBrRBCCCHmNQlWhBBCCDGvSbAyA8dxuOqqq3Ac\n51A3ZU7I/S18h/s9yv0tfIf7PR7u9wfz4x4X/AJbIYQQQhzeZGRFCCGEEPOaBCtCCCGEmNckWBFC\nCCHEvCbBihBCCCHmtSM6WLn22ms5+eSTSSQS5HK5aY/ZvHkz5513HslkkmKxyOWXX06z2ZzxdX3f\n52Mf+xjFYpFkMsl73vMetm7dOgd3cGAeeOABNE2b9uvxxx/f53kXX3zxXsefdNJJbWz5/lu2bNle\nbb3iiitmPEcpxdVXX01fXx+e53Hqqafy1FNPtanF++/ll1/mkksuYfny5Xiex4oVK7jqqqte8+dx\nvvff17/+dZYvX47ruqxevZr/+I//mPH4Bx98kNWrV+O6LkcffTS33HJLm1p6YL70pS/xO7/zO6TT\nabq6uvjDP/xDnn322RnP2df/0WeeeaZNrT4wV1999V5t7enpmfGchdJ/MP3niaZpfPSjH532+IXQ\nfz//+c8577zz6OvrQ9M0fvSjH015/mA/D++44w6OP/54HMfh+OOP56677prVdh/RwUqz2eT888/n\nwx/+8LTPR1HEOeecQ7Va5aGHHuL222/njjvu4NOf/vSMr/uJT3yCu+66i9tvv52HHnqI8fFxzj33\nXKIomovb2G8nn3wy27dvn/J16aWXsmzZMk488cQZzz3rrLOmnPfjH/+4Ta0+cF/84hentPWv/uqv\nZjz++uuv56tf/Spf+9rXePzxx+np6eH3f//3J+pOzRfPPPMMcRzzzW9+k6eeeoqbbrqJW265hc9/\n/vOvee587b/vf//7fOITn+ALX/gCGzdu5J3vfCdnn302mzdvnvb4l156iT/4gz/gne98Jxs3buTz\nn/88l19+OXfccUebW/7aHnzwQT760Y/y6KOPct999xGGIWeccQbVavU1z3322Wen9Nexxx7bhhYf\nnDe+8Y1T2vrrX/96n8cupP4DePzxx6fc23333QfA+eefP+N587n/qtUqb37zm/na17427fMH83n4\nyCOP8P73v5+LLrqIX/3qV1x00UVccMEFPPbYY7PXcCXU+vXrVTab3evxH//4x0rXdbVt27aJx773\nve8px3FUqVSa9rXGxsaUZVnq9ttvn3hs27ZtStd19ZOf/GTW2/56NJtN1dXVpb74xS/OeNzatWvV\ne9/73vY06nVaunSpuummm/b7+DiOVU9Pj7ruuusmHms0GiqbzapbbrllDlo4u66//nq1fPnyGY+Z\nz/33u7/7u+pDH/rQlMeOO+44dcUVV0x7/Gc/+1l13HHHTXnsL//yL9VJJ500Z22cLYODgwpQDz74\n4D6P2bBhgwLU6Oho+xr2Olx11VXqzW9+834fv5D7TymlPv7xj6sVK1aoOI6nfX6h9R+g7rrrronv\nD/bz8IILLlBnnXXWlMfOPPNMdeGFF85aW4/okZXX8sgjj7Bq1Sr6+vomHjvzzDPxfZ8nnnhi2nOe\neOIJgiDgjDPOmHisr6+PVatW8fDDD895mw/E3XffzdDQEBdffPFrHvvAAw/Q1dXFG97wBi677DIG\nBwfnvoEH6ctf/jIdHR285S1v4dprr51xmuSll15iYGBgSn85jsMpp5wy7/prOqVSiUKh8JrHzcf+\nazabPPHEE1Pee4Azzjhjn+/9I488stfxZ555Jr/4xS8IgmDO2jobSqUSwH711wknnEBvby+nn346\nGzZsmOumvS7PP/88fX19LF++nAsvvJBNmzbt89iF3H/NZpPvfOc7/Pmf//lrFs1dSP032cF+Hu6r\nX2fzM1SClRkMDAzQ3d095bF8Po9t2wwMDOzzHNu2yefzUx7v7u7e5zmHym233caZZ57JkiVLZjzu\n7LPP5rvf/S4/+9nP+MpXvsLjjz/Ou9/9bnzfb1NL99/HP/5xbr/9djZs2MC6dev4u7/7Oz7ykY/s\n8/jdfbJnP8/H/trTiy++yM0338yHPvShGY+br/03NDREFEUH9N5P93+yu7ubMAwZGhqas7a+Xkop\nPvWpT/GOd7yDVatW7fO43t5ebr31Vu644w7uvPNOVq5cyemnn87Pf/7zNrZ2/73tbW/jn//5n/np\nT3/Kt771LQYGBjj55JMZHh6e9viF2n8AP/rRjxgbG5vxj7uF1n97OtjPw33162x+hi74qst7uvrq\nq7nmmmtmPObxxx9/zTUau00XQSulXjOyno1z9tfB3PPWrVv56U9/yg9+8IPXfP33v//9E/9etWoV\nJ554IkuXLuWee+7hfe9738E3fD8dyP198pOfnHjst3/7t8nn8/zxH//xxGjLvuzZN3PZX3s6mP7r\n7+/nrLPO4vzzz+fSSy+d8dxD3X+v5UDf++mOn+7x+WTdunX893//Nw899NCMx61cuZKVK1dOfL9m\nzRq2bNnCjTfeyLve9a65buYBO/vssyf+/aY3vYk1a9awYsUKvv3tb/OpT31q2nMWYv9B64+7s88+\ne8pI+54WWv/ty8F8Hs71Z+hhF6ysW7eOCy+8cMZjli1btl+v1dPTs9cCodHRUYIg2CuKnHxOs9lk\ndHR0yujK4OAgJ5988n5d90AdzD2vX7+ejo4O3vOe9xzw9Xp7e1m6dCnPP//8AZ97MF5Pn+7e9fLC\nCy9MG6zs3rkwMDBAb2/vxOODg4P77OPZdqD319/fz2mnncaaNWu49dZbD/h67e6/fSkWixiGsddf\nXzO99z09PdMeb5rmjMHoofSxj32Mu+++m5///OcsXrz4gM8/6aST+M53vjMHLZt9yWSSN73pTfv8\n2VqI/QfwyiuvcP/993PnnXce8LkLqf8O9vNwX/06m5+hh12wUiwWKRaLs/Jaa9as4dprr2X79u0T\nHXfvvffiOA6rV6+e9pzVq1djWRb33XcfF1xwAQDbt2/nySef5Prrr5+Vdu3pQO9ZKcX69ev5sz/7\nMyzLOuDrDQ8Ps2XLlik/zHPp9fTpxo0bAfbZ1uXLl9PT08N9993HCSecALTmph988EG+/OUvH1yD\nD9CB3N+2bds47bTTWL16NevXr0fXD3wmt939ty+2bbN69Wruu+8+/uiP/mji8fvuu4/3vve9056z\nZs0a/vVf/3XKY/feey8nnnjiQf0szyWlFB/72Me46667eOCBB1i+fPlBvc7GjRsPeV/tL9/3+c1v\nfsM73/nOaZ9fSP032fr16+nq6uKcc8454HMXUv8d7OfhmjVruO+++6aMbN97772z+wf6rC3VXYBe\neeUVtXHjRnXNNdeoVCqlNm7cqDZu3KgqlYpSSqkwDNWqVavU6aefrn75y1+q+++/Xy1evFitW7du\n4jW2bt2qVq5cqR577LGJxz70oQ+pxYsXq/vvv1/98pe/VO9+97vVm9/8ZhWGYdvvcTr333+/AtTT\nTz897fMrV65Ud955p1JKqUqloj796U+rhx9+WL300ktqw4YNas2aNWrRokWqXC63s9mv6eGHH1Zf\n/epX1caNG9WmTZvU97//fdXX16fe8573TDlu8v0ppdR1112nstmsuvPOO9Wvf/1r9YEPfED19vbO\nu/vbtm2bOuaYY9S73/1utXXrVrV9+/aJr8kWUv/dfvvtyrIsddttt6mnn35afeITn1DJZFK9/PLL\nSimlrrjiCnXRRRdNHL9p0yaVSCTUJz/5SfX000+r2267TVmWpX74wx8eqlvYpw9/+MMqm82qBx54\nYEpf1Wq1iWP2vL+bbrpJ3XXXXeq5555TTz75pLriiisUoO64445DcQuv6dOf/rR64IEH1KZNm9Sj\njz6qzj33XJVOpw+L/tstiiJ11FFHqc997nN7PbcQ+69SqUz8rgMmPjNfeeUVpdT+fR5edNFFU3bs\n/ed//qcyDENdd9116je/+Y267rrrlGma6tFHH521dh/RwcratWsVsNfXhg0bJo555ZVX1DnnnKM8\nz1OFQkGtW7dONRqNiedfeumlvc6p1+tq3bp1qlAoKM/z1Lnnnqs2b97cxjub2Qc+8AF18skn7/N5\nQK1fv14ppVStVlNnnHGG6uzsVJZlqaOOOkqtXbt2Xt3Pbk888YR629veprLZrHJdV61cuVJdddVV\nqlqtTjlu8v0p1dqud9VVV6menh7lOI5617vepX7961+3ufWvbf369dP+vO75N8dC679/+Id/UEuX\nLlW2bau3vvWtU7b2rl27Vp1yyilTjn/ggQfUCSecoGzbVsuWLVPf+MY32tzi/bOvvpr8s7fn/X35\ny19WK1asUK7rqnw+r97xjneoe+65p/2N30/vf//7VW9vr7IsS/X19an3ve996qmnnpp4fiH3324/\n/elPFaCeffbZvZ5biP23e3v1nl9r165VSu3f5+Epp5wycfxu//Iv/6JWrlypLMtSxx133KwHaJpS\nu1Y3CSGEEELMQ7J1WQghhBDzmgQrQgghhJjXJFgRQgghxLwmwYoQQggh5jUJVoQQQggxr0mwIoQQ\nQoh5TYIVIYQQQsxrEqwIIYQQYl6TYEUIIYQQ85oEK0IIIYSY1yRYEUIIIcS8JsGKEEIIIea1/x92\nLg0ww6XnZgAAAABJRU5ErkJggg==\n"
}
}
],
"source": [
"plt.plot(x,y,'o',alpha=0.05)\n",
"plt.plot(x,2*x,'--')"
],
"id": "fe70984f-d684-4ddb-b948-113fb16d4f0d"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 데이터의 크기가 커지는 순간 `X.to(\"cuda:0\")`, `y.to(\"cuda:0\")` 쓰면\n",
"난리나겠는걸?\n",
"\n",
"`-` 데이터를 100개중에 1개만 꼴로만 쓰면 어떨까?"
],
"id": "4805e17c-92c9-4ff2-a6d2-b90230e0cf42"
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9h\nAAAPYQGoP6dpAADBi0lEQVR4nOz9ebym6V3X+36u6R6eaQ01dvWQ7iTd6YxkghACJCBpiYgCKhw5\nIrjdGE8AiUGDEYQEMQ24iehBoriPoCL7IEe2sIWNCQYSMEGSQAY6Yyed7vRQXdNa65nu+77G88f9\nrJWq6qqe0lW1uvp6v171SupZ0736j35+fV2/3/cnUkqJLMuyLMuyfUpe6QfIsizLsix7OLlYybIs\ny7JsX8vFSpZlWZZl+1ouVrIsy7Is29dysZJlWZZl2b6Wi5Usy7Isy/a1XKxkWZZlWbav5WIly7Is\ny7J9TV/pB/hixRi5//77GY/HCCGu9ONkWZZlWfYopJSYzWYcO3YMKR/+7ORJX6zcf//9XH/99Vf6\nMbIsy7Isexw+//nPc9111z3s5zzpi5XxeAz0v+xkMrnCT5NlWZZl2aMxnU65/vrr997HH86TvljZ\nvfqZTCa5WMmyLMuyJ5lH08KRG2yzLMuyLNvXcrGSZVmWZdm+louVLMuyLMv2tVysZFmWZVm2r+Vi\nJcuyLMuyfS0XK1mWZVmW7Wu5WMmyLMuybF/LxUqWZVmWZfvakz4ULsuyLMuyJ16IiZgSUgiUvLK7\n93KxkmVZlmXZHh8irQt0IZISCAGlklRGodWVuZDJxUqWZVmWZUBfqMw6T4gJoyRSQEzQ+oiLiXGp\nr0jBkntWsizLsiwDoHWBEBOVUSgpEKsroMooQky0LlyR58rFSpZlWZZlhJjoQsRc5OTEKEkXIiGm\ny/xkuVjJsizLsgyIKZESXKyXVgpIqf+8yy0XK1mWZVl2lQsx4R7hVEQKgVj1qFxIXDXbSnH5J4Ny\ng22WZVmWXaUey2SPkgItBEvrGRR9eXD26LILkUrLKzLGnIuVLMuyLLsKnT/Zk1LCx8TChodM9uwW\nNW0IbC877tteUErFoFBIJZHAsNRURl2R3yUXK1mWZVl2Fdqd7NFS0FiPC18IeWtdQKTE+rDcK2qW\n1tO6QNMFGheYh8DSKtYHhqrQpCuYC5eLlSzLsiy7yuxO9ggB87NOV4wQxATeRU4vLXWhmbeO0/OO\n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\nvva1bNmyBaUUf/M3f7PH84/09+FnP/tZzjrrLLIs46yzzuLzn//8YT3vx3WwUtc1r3/96/nlX/7l\nFZ/33vPqV7+awWDAtddeyxVXXMFnP/tZ3v3udx/wfX/t136Nz3/+81xxxRVce+219Pt9XvOa1+C9\nPxKXcdCe//zn8+CDD+7x5y1veQunnnoqz372sw/42le+8pV7vO7v//7vH6OzPnQf+MAH9jjX3/3d\n3z3g8R/5yEf4gz/4A/7oj/6IG264gU2bNvHyl798ae7UavG9732PEAJ/+qd/yne+8x0+8YlP8KlP\nfYr3vve9D/va1Xr//vIv/5Jf+7Vf43d+53e46aabeOELX8irXvUq7rnnnhWPv/POO/mJn/gJXvjC\nF3LTTTfx3ve+l3e+85189rOffYzP/OF9+ctf5h3veAdf+9rXuOqqq3DO8YpXvILBYPCwr73tttv2\nuF9PfOITH4MzfmSe+tSn7nGuN998836PPZbuH8ANN9ywx7VdddVVALz+9a8/4OtW8/0bDAY84xnP\n4I/+6I9WfP6R/D687rrreMMb3sCFF17It771LS688EJ+5md+huuvv/7wnXgU8fLLL49TU1P7PP73\nf//3UWsd77///qXH/tf/+l8xy7I4Nze34nvNzs7GJEniFVdcsfTY/fffH7XW8f/8n/9z2M/90ajr\nOm7YsCF+4AMfOOBxF110UfzJn/zJx+akHqVTTjklfuITnzjo40MIcdOmTfFDH/rQ0mNlWcapqan4\nqU996gic4eH1kY98JJ522mkHPGY137/nPve58W1ve9sejz35yU+O73nPe1Y8/jd/8zfjk5/85D0e\n+6Vf+qX4vOc974id4+Gybdu2CMQvf/nL+z3m6quvjkDcvXv3Y3dij8Ill1wSn/GMZxz08cfy/Ysx\nxl/91V+Np59+egwhrPj8sXb/gPj5z39+6etH+vvwZ37mZ+IrX/nKPR674IIL4hvf+MbDdq6P65WV\nh3Pddddx9tlns2XLlqXHLrjgAqqq4sYbb1zxNTfeeCNN0/CKV7xi6bEtW7Zw9tln89WvfvWIn/Oh\n+Nu//Vt27NjBm9/85oc99pprrmHDhg086UlP4q1vfSvbtm078if4CH34wx9m7dq1PPOZz+Syyy47\n4DbJnXfeydatW/e4X1mW8eIXv3jV3a+VzM3NsWbNmoc9bjXev7quufHGG/f4uwd4xStesd+/++uu\nu26f4y+44AK+/vWv0zTNETvXw2Fubg7goO7XOeecw+bNm3nZy17G1VdffaRP7VG5/fbb2bJlC6ed\ndhpvfOMbueOOO/Z77LF8/+q65i/+4i/4hV/4hYcdmnss3b/lHunvw/3d18P5O1SClQPYunUrGzdu\n3OOxmZkZ0jRl69at+31NmqbMzMzs8fjGjRv3+5qj5TOf+QwXXHABJ5100gGPe9WrXsX//J//k3/6\np3/i4x//ODfccAMvfelLqarqMTrTg/erv/qrXHHFFVx99dVcfPHF/Kf/9J94+9vfvt/jF+/J3vd5\nNd6vvf3whz/kk5/8JG9729sOeNxqvX87duzAe39If/cr/T+5ceNGnHPs2LHjiJ3roxVj5F3vehcv\neMELOPvss/d73ObNm/n0pz/NZz/7WT73uc9x5pln8rKXvYyvfOUrj+HZHrwf+7Ef48///M/54he/\nyH/9r/+VrVu38vznP5+dO3euePyxev8A/uZv/obZ2dkD/uPuWLt/e3ukvw/3d18P5+/QY37q8t4u\nvfRS3v/+9x/wmBtuuOFhczQWrRRBxxgfNrI+HK85WI/kmu+77z6++MUv8ld/9VcP+/5veMMblv77\n7LPP5tnPfjannHIKX/jCF/ipn/qpR37iB+lQru/Xf/3Xlx57+tOfzszMDD/90z+9tNqyP3vfmyN5\nv/b2SO7fAw88wCtf+Upe//rX85a3vOWArz3a9+/hHOrf/UrHr/T4anLxxRfz7W9/m2uvvfaAx515\n5pmceeaZS1+fd9553HvvvXzsYx/jRS960ZE+zUP2qle9aum/n/a0p3Heeedx+umn82d/9me8613v\nWvE1x+L9g/Yfd6961av2WGnf27F2//bnkfw+PNK/Q4+7YOXiiy/mjW984wGPOfXUUw/qvTZt2rRP\ngtDu3btpmmafKHL5a+q6Zvfu3Xusrmzbto3nP//5B/V9D9UjuebLL7+ctWvX8rrXve6Qv9/mzZs5\n5ZRTuP322w/5tY/Eo7mni1UvP/jBD1YMVhYrF7Zu3crmzZuXHt+2bdt+7/HhdqjX98ADD3D++edz\n3nnn8elPf/qQv99jff/2Z926dRhj9vnX14H+7jdt2rTi8dbaAwajR9Ov/Mqv8Ld/+7d85Stf4cQT\nTzzk1z/vec/jL/7iL47AmR1+3W6Xpz3tafv92ToW7x/A3XffzZe+9CU+97nPHfJrj6X790h/H+7v\nvh7O36HHXbCybt061q1bd1je67zzzuOyyy7jwQcfXLpxV155JVmWce655674mnPPPZckSbjqqqv4\nmZ/5GQAefPBBbrnlFj7ykY8clvPa26Fec4yRyy+/nJ/7uZ8jSZJD/n47d+7k3nvv3eOH+Uh6NPf0\npptuAtjvuZ522mls2rSJq666inPOOQdo96a//OUv8+EPf/iRnfAhOpTru//++zn//PM599xzufzy\ny9H60HdyH+v7tz9pmnLuuedy1VVX8W//7b9devyqq67iJ3/yJ1d8zXnnncff/d3f7fHYlVdeybOf\n/exH9LN8JMUY+ZVf+RU+//nPc80113Daaac9ove56aabjvq9OlhVVfHd736XF77whSs+fyzdv+Uu\nv/xyNmzYwKtf/epDfu2xdP8e6e/D8847j6uuumqPle0rr7zy8P4D/bCl6h6D7r777njTTTfF97//\n/bHX68Wbbrop3nTTTXFhYSHGGKNzLp599tnxZS97WfzGN74Rv/SlL8UTTzwxXnzxxUvvcd9998Uz\nzzwzXn/99UuPve1tb4snnnhi/NKXvhS/8Y1vxJe+9KXxGc94RnTOPebXuJIvfelLEYi33nrris+f\neeaZ8XOf+1yMMcaFhYX47ne/O371q1+Nd955Z7z66qvjeeedF0844YQ4Pz//WJ72w/rqV78a/+AP\n/iDedNNN8Y477oh/+Zd/Gbds2RJf97rX7XHc8uuLMcYPfehDcWpqKn7uc5+LN998c3zTm94UN2/e\nvOqu7/77749nnHFGfOlLXxrvu++++OCDDy79We5Yun9XXHFFTJIkfuYzn4m33npr/LVf+7XY7Xbj\nXXfdFWOM8T3veU+88MILl46/4447YqfTib/+678eb7311viZz3wmJkkS//f//t9H6xL265d/+Zfj\n1NRUvOaaa/a4V8PhcOmYva/vE5/4RPz85z8fv//978dbbrklvuc974lA/OxnP3s0LuFhvfvd747X\nXHNNvOOOO+LXvva1+JrXvCZOTEwcF/dvkfc+nnzyyfG3fuu39nnuWLx/CwsLS591wNLvzLvvvjvG\neHC/Dy+88MI9Kvb+5V/+JRpj4oc+9KH43e9+N37oQx+K1tr4ta997bCd9+M6WLnooosisM+fq6++\neumYu+++O7761a+ORVHENWvWxIsvvjiWZbn0/J133rnPa0ajUbz44ovjmjVrYlEU8TWveU285557\nHsMrO7A3velN8fnPf/5+nwfi5ZdfHmOMcTgcxle84hVx/fr1MUmSePLJJ8eLLrpoVV3PohtvvDH+\n2I/9WJyamop5nsczzzwzXnLJJXEwGOxx3PLri7Et17vkkkvipk2bYpZl8UUvelG8+eabH+Ozf3iX\nX375ij+ve/+b41i7f//lv/yXeMopp8Q0TeOznvWsPUp7L7roovjiF794j+OvueaaeM4558Q0TeOp\np54a/+RP/uQxPuODs797tfxnb+/r+/CHPxxPP/30mOd5nJmZiS94wQviF77whcf+5A/SG97whrh5\n8+aYJEncsmVL/Kmf+qn4ne98Z+n5Y/n+LfriF78YgXjbbbft89yxeP8Wy6v3/nPRRRfFGA/u9+GL\nX/zipeMX/fVf/3U888wzY5Ik8clPfvJhD9BUjOPsJiGEEEKIVUhKl4UQQgixqkmwIoQQQohVTYIV\nIYQQQqxqEqwIIYQQYlWTYEUIIYQQq5oEK0IIIYRY1SRYEUIIIcSqJsGKEEIIIVY1CVaEEEIIsapJ\nsCKEEEKIVU2CFSGEEEKsahKsCCGEEGJV+38BSFi0Qqa7tSIAAAAASUVORK5CYII=\n"
}
}
],
"source": [
"plt.plot(x[::100],y[::100],'o',alpha=0.05)\n",
"plt.plot(x,2*x,'--')"
],
"id": "90d0a457-d71c-4959-a357-4d53d43f3e6c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 대충 이거만 가지고 적합해도 충분히 정확할것 같은데?\n",
"\n",
"## B. X,y 데이터를 굳이 모두 GPU에 넘겨야 하는가?\n",
"\n",
"`-` 데이터셋을 짝홀로 나누어서 번갈아가면서 GPU에 올렸다 내렸다하면\n",
"안되나?\n",
"\n",
"`-` 아래의 알고리즘을 생각해보자.\n",
"\n",
"1. 데이터를 반으로 나눈다.\n",
"2. 짝수obs의 x,y 그리고 net의 모든 파라메터를 GPU에 올린다.\n",
"3. yhat, loss, grad, update 수행\n",
"4. 짝수obs의 x,y를 GPU메모리에서 내린다. 그리고 홀수obs의 x,y를\n",
" GPU메모리에 올린다.\n",
"5. yhat, loss, grad, update 수행\n",
"6. 홀수obs의 x,y를 GPU메모리에서 내린다. 그리고 짝수obs의 x,y를\n",
" GPU메모리에 올린다.\n",
"7. 반복\n",
"\n",
"> 이러면 되는거아니야???? —\\> 맞아요\n",
"\n",
"## C. 경사하강법, 확률적경사하강법, 미니배치 경사하강법\n",
"\n",
"10개의 샘플이 있다고 가정. $\\{(x_i,y_i)\\}_{i=1}^{10}$\n",
"\n",
"`# ver1` – 모든 샘플을 이용하여 slope 계산\n",
"\n",
"(epoch 1) $loss=\\sum_{i=1}^{10}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"\n",
"(epoch 2) $loss=\\sum_{i=1}^{10}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"\n",
"…\n",
"\n",
"> 우리가 항상 이렇게 했죠!\n",
"\n",
"`# ver2` – 하나의 샘플만을 이용하여 slope 계산\n",
"\n",
"(epoch 1)\n",
"\n",
"- $loss=(y_1-w_0-w_1x_1)^2 \\to slope \\to update$\n",
"- $loss=(y_2-w_0-w_1x_2)^2 \\to slope \\to update$\n",
"- …\n",
"- $loss=(y_{10}-w_0-w_1x_{10})^2 \\to slope \\to update$\n",
"\n",
"(epoch 2)\n",
"\n",
"- $loss=(y_1-w_0-w_1x_1)^2 \\to slope \\to update$\n",
"- $loss=(y_2-w_0-w_1x_2)^2 \\to slope \\to update$\n",
"- …\n",
"- $loss=(y_{10}-w_0-w_1x_{10})^2 \\to slope \\to update$\n",
"\n",
"…\n",
"\n",
"`# ver3` – $m (\\leq n)$ 개의 샘플을 이용하여 slope 계산\n",
"\n",
"$m=3$이라고 하자.\n",
"\n",
"(epoch 1)\n",
"\n",
"- $loss=\\sum_{i=1}^{3}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"- $loss=\\sum_{i=4}^{6}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"- $loss=\\sum_{i=7}^{9}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"- $loss=(y_{10}-w_0-w_1x_{10})^2 \\to slope \\to update$\n",
"\n",
"(epoch 2)\n",
"\n",
"- $loss=\\sum_{i=1}^{3}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"- $loss=\\sum_{i=4}^{6}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"- $loss=\\sum_{i=7}^{9}(y_i-w_0-w_1x_i)^2 \\to slope \\to update$\n",
"- $loss=(y_{10}-w_0-w_1x_{10})^2 \\to slope \\to update$\n",
"\n",
"…\n",
"\n",
"## D. 용어의 정리\n",
"\n",
"**옛날**\n",
"\n",
"`-` ver1: gradient descent, batch gradient descent\n",
"\n",
"`-` ver2: stochastic gradient descent\n",
"\n",
"`-` ver3: mini-batch gradient descent, mini-batch stochastic gradient\n",
"descent\n",
"\n",
"**요즘**\n",
"\n",
"`-` ver1: gradient descent\n",
"\n",
"`-` ver2: stochastic gradient descent with batch size = 1\n",
"\n",
"`-` **ver3: stochastic gradient descent** -\n",
"https://www.deeplearningbook.org/contents/optimization.html, 알고리즘\n",
"8-1 참고.\n",
"\n",
"## E. Dataset(`ds`), DataLoader(`dl`)\n",
"\n",
"> 취지는 알겠으나, C의 과정을 실제 구현하려면 진짜 힘들것 같아요..\n",
"> (입코딩과 손코딩의 차이) –\\> 이걸 해결하기 위해서 파이토치에서는\n",
"> DataLoader라는 오브젝트를 준비했음!\n",
"\n",
"`-` ds: 섭스크립터블함"
],
"id": "65a24f32-b690-461d-8a98-81d1214e6755"
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"x=torch.tensor(range(10)).float().reshape(-1,1)\n",
"y=torch.tensor([1.0]*5+[0.0]*5).reshape(-1,1)\n",
"torch.concat([x,y],axis=1)"
],
"id": "fd133a9e-03df-4a28-80a1-eb07f327da25"
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"ds=torch.utils.data.TensorDataset(x,y)\n",
"ds"
],
"id": "b339974a-d346-4aef-b991-eb737f4dbbba"
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"ds.tensors \n",
"# 생긴건 ds.tensors = (x,y) 임"
],
"id": "38c41614-ece3-4067-8092-4ff8720279bd"
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"ds[0],(x,y)[0] # (x,y) 튜플자체는 아님.. 인덱싱이 다르게 동작"
],
"id": "d93c4c02"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Note**\n",
">\n",
"> 여기서 제가 `__iter__` 가 숨겨져 있는 오브젝트일 경우만 `for`문이\n",
"> 동작한다고 설명 했는데요, `__getitem__`이 있는 경우도 동작한다고\n",
"> 합니다. **제가 잘못 알고 있었어요. 혼란을 드려 죄송합니다**.\n",
">\n",
"> - 그래도 `dl`은 for 를 돌리기위해서 만든 오브젝트라는 설명은 맞는\n",
"> 설명입니다.\n",
"> - `ds`역시 독특한 방식의 인덱싱을 지원하도록 한 오브젝트라는 설명도\n",
"> 맞는 설명입니다.\n",
"\n",
"`-` dl: 섭스크립터블하지 않지만 이터러블함"
],
"id": "b4715811-aa5f-44f4-91a0-91e311632118"
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"dl=torch.utils.data.DataLoader(ds,batch_size=3)\n",
"#set(dir(dl)) & {'__iter__'}"
],
"id": "05b05710-3ee4-4f65-b6cf-d0702c884166"
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"x_batch:[[0.0], [1.0], [2.0]] y_batch:[[1.0], [1.0], [1.0]]\n",
"x_batch:[[3.0], [4.0], [5.0]] y_batch:[[1.0], [1.0], [0.0]]\n",
"x_batch:[[6.0], [7.0], [8.0]] y_batch:[[0.0], [0.0], [0.0]]\n",
"x_batch:[[9.0]] y_batch:[[0.0]]"
]
}
],
"source": [
"for xi,yi in dl:\n",
" print(f\"x_batch:{xi.tolist()} \\t y_batch:{yi.tolist()}\")"
],
"id": "07cf4f98"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 마지막관측치는 뭔데 단독으로 업데이트하냐?? –\\> shuffle True 같이\n",
"자잘한 옵션도 있음.."
],
"id": "0cabef47-54e8-40e2-ba64-dc6101a600ef"
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"x_batch=[[1.0], [8.0], [0.0]] y_batch=[[1.0], [0.0], [1.0]]\n",
"x_batch=[[2.0], [7.0], [6.0]] y_batch=[[1.0], [0.0], [0.0]]\n",
"x_batch=[[5.0], [3.0], [9.0]] y_batch=[[0.0], [1.0], [0.0]]\n",
"x_batch=[[4.0]] y_batch=[[1.0]]"
]
}
],
"source": [
"dl = torch.utils.data.DataLoader(ds,batch_size=3,shuffle=True)\n",
"for xi,yi in dl:\n",
" print(f'x_batch={xi.tolist()} \\t y_batch={yi.tolist()}')"
],
"id": "35537fb1"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## F. ds, dl을 이용한 MNIST 구현\n",
"\n",
"`-` 목표: 확률적경사하강법과 그냥 경사하강법의 성능을 “동일 반복횟수”로\n",
"비교해보자.\n",
"\n",
"- batch_size = 2048로 설정할것\n",
"\n",
"`-` 그냥 경사하강법 – 미니배치 안쓰는 학습, 우리가 맨날하는 그거"
],
"id": "e4298771-f3c3-4ae4-8b1d-7e5f6146d0af"
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data('https://s3.amazonaws.com/fast-ai-imageclas/mnist_png.tgz')\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X = torch.concat([X0,X1],axis=0).reshape(-1,1*28*28)/255\n",
"y = torch.tensor([0.0]*len(X0) + [1.0]*len(X1)).reshape(-1,1)\n",
"## Step2: 학습가능한 오브젝트 생성\n",
"torch.manual_seed(1)\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(784,32),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(32,1),\n",
" torch.nn.Sigmoid()\n",
")\n",
"loss_fn = torch.nn.BCELoss()\n",
"optimizr = torch.optim.SGD(net.parameters())\n",
"## Step3: fit \n",
"for epoc in range(700):\n",
" # step1 \n",
" yhat = net(X)\n",
" # step2 \n",
" loss = loss_fn(yhat,y)\n",
" # step3 \n",
" loss.backward()\n",
" # step4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"## Step4: Predict \n",
"((yhat > 0.5)*1.0 == y).float().mean()"
],
"id": "0e853019-48ca-4bb6-8b4d-f02e248cf9b8"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` “확률적”경사하강법 – 미니배치 쓰는 학습"
],
"id": "3678621a-29da-49db-871e-4e840726ef9e"
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data('https://s3.amazonaws.com/fast-ai-imageclas/mnist_png.tgz')\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X = torch.concat([X0,X1],axis=0).reshape(-1,1*28*28)/255\n",
"y = torch.tensor([0.0]*len(X0) + [1.0]*len(X1)).reshape(-1,1)\n",
"ds = torch.utils.data.TensorDataset(X,y)\n",
"dl = torch.utils.data.DataLoader(ds,batch_size=2048)\n",
"## Step2: 학습가능한 오브젝트 생성\n",
"torch.manual_seed(1)\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(784,32),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(32,1),\n",
" torch.nn.Sigmoid()\n",
")\n",
"loss_fn = torch.nn.BCELoss()\n",
"optimizr = torch.optim.SGD(net.parameters())\n",
"# ## Step3: fit \n",
"for epoc in range(100):\n",
" for xi,yi in dl: \n",
" # step1 \n",
" #yihat = net(xi)\n",
" # step2 \n",
" loss = loss_fn(net(xi),yi)\n",
" # step3 \n",
" loss.backward()\n",
" # step4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"# ## Step4: Predict \n",
"((net(X) > 0.5)*1.0 == y).float().mean()"
],
"id": "79fd68fc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` GPU를 활용하는 “확률적”경사하강법 – 실제적으로는 이게 최종알고리즘"
],
"id": "7e009de5-108c-4a3e-afcd-d5f1b853a0cd"
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data('https://s3.amazonaws.com/fast-ai-imageclas/mnist_png.tgz')\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X = torch.concat([X0,X1],axis=0).reshape(-1,1*28*28)/255\n",
"y = torch.tensor([0.0]*len(X0) + [1.0]*len(X1)).reshape(-1,1)\n",
"ds = torch.utils.data.TensorDataset(X,y)\n",
"dl = torch.utils.data.DataLoader(ds,batch_size=2048)\n",
"## Step2: 학습가능한 오브젝트 생성\n",
"torch.manual_seed(1)\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(784,32),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(32,1),\n",
" torch.nn.Sigmoid()\n",
").to(\"cuda:0\")\n",
"loss_fn = torch.nn.BCELoss()\n",
"optimizr = torch.optim.SGD(net.parameters())\n",
"## Step3: fit \n",
"for epoc in range(100):\n",
" for xi,yi in dl: \n",
" # step1 \n",
" # step2 \n",
" loss = loss_fn(net(xi.to(\"cuda:0\")),yi.to(\"cuda:0\"))\n",
" # step3 \n",
" loss.backward()\n",
" # step4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"# ## Step4: Predict\n",
"net.to(\"cpu\")\n",
"((net(X) > 0.5)*1.0 == y).float().mean()"
],
"id": "cb360dea-f518-48d4-81c3-095a80f235b7"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 5. 다중클래스 분류\n",
"\n",
"## A. 결론 (그냥 외우세요)\n",
"\n",
"`-` 2개의 class를 구분하는 문제가 아니라 $k$개의 class를 구분해야\n",
"한다면?\n",
"\n",
"***일반적인 개념***\n",
"\n",
"- 손실함수: BCE loss $\\to$ Cross Entropy loss\n",
"- 마지막층의 선형변환: torch.nn.Linear(?,1) $\\to$ torch.nn.Linear(?,k)\n",
"- **마지막층의 활성화: sig $\\to$ softmax**\n",
"\n",
"***파이토치 한정***\n",
"\n",
"- **y의형태: (n,) vector + int형 // (n,k) one-hot encoded matrix +\n",
" float형**\n",
"- 손실함수: torch.nn.BCEWithLogitsLoss, $\\to$\n",
" torch.nn.CrossEntropyLoss\n",
"- 마지막층의 선형변환: torch.nn.Linear(?,1) $\\to$ torch.nn.Linear(?,k)\n",
"- **마지막층의 활성화: None $\\to$ None (손실함수에 이미 마지막층의\n",
" 활성화가 포함)**\n",
"\n",
"## B. 실습: 3개의 클래스를 구분\n",
"\n",
"`-` 정리된 코드1: 통계잘하는데 파이토치 못쓰는 사람의 코드"
],
"id": "e3bf3cae-c832-415e-ab98-98965fc8cf36"
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data('https://s3.amazonaws.com/fast-ai-imageclas/mnist_png.tgz')\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X2 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/2').ls()])\n",
"X = torch.concat([X0,X1,X2]).reshape(-1,1*28*28)/255\n",
"y = torch.nn.functional.one_hot(torch.tensor([0]*len(X0) + [1]*len(X1)+ [2]*len(X2))).float()\n",
"## Step2: 학습가능한 오브젝트 생성\n",
"torch.manual_seed(43052)\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(784,32),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(32,3),\n",
"# torch.nn.Softmax()\n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"## Step3: 적합 \n",
"for epoc in range(100):\n",
" ## step1 \n",
" netout = net(X)\n",
" ## step2 \n",
" loss = loss_fn(netout,y)\n",
" ## step3 \n",
" loss.backward()\n",
" ## step4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
" \n",
"## Step4: 적합 (혹은 적합결과확인)\n",
"(netout.argmax(axis=1) == y.argmax(axis=1)).float().mean()"
],
"id": "f6d19628-cdc0-40ed-aebc-2f5ff95e0d3c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 정리된 코드2: 파이토치를 잘하는 사람의 코드"
],
"id": "0bc13805-ebe3-40f3-bc1a-b75d1fc0c52a"
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data('https://s3.amazonaws.com/fast-ai-imageclas/mnist_png.tgz')\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X2 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/2').ls()])\n",
"X = torch.concat([X0,X1,X2]).reshape(-1,1*28*28)/255\n",
"#y = torch.nn.functional.one_hot(torch.tensor([0]*len(X0) + [1]*len(X1)+ [2]*len(X2))).float()\n",
"y = torch.tensor([0]*len(X0) + [1]*len(X1)+ [2]*len(X2))\n",
"## Step2: 학습가능한 오브젝트 생성\n",
"torch.manual_seed(43052)\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(784,32),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(32,3),\n",
"# torch.nn.Softmax()\n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"## Step3: 적합 \n",
"for epoc in range(100):\n",
" ## step1 \n",
" netout = net(X)\n",
" ## step2 \n",
" loss = loss_fn(netout,y)\n",
" ## step3 \n",
" loss.backward()\n",
" ## step4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"## Step4: 적합 (혹은 적합결과확인) \n",
"(netout.argmax(axis=1) == y).float().mean()"
],
"id": "be8953ee-bd7a-489c-be88-0946917e949e"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 완전같은코드임\n",
"\n",
"## C. Softmax\n",
"\n",
"`-` 눈치: softmax를 쓰기 직전의 숫자들은 (n,k)꼴로 되어있음. 각\n",
"observation 마다 k개의 숫자가 있는데, 그중에서 유난히 큰 하나의 숫자가\n",
"있음."
],
"id": "7153f5d8-5b51-4fc6-a1d6-94ff1beee97f"
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net(X)"
],
"id": "2356aac1-893d-485c-98c6-42c800d6cce4"
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"y"
],
"id": "cd9c8eff-8c9f-4460-b08d-2bc11812216c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 수식\n",
"\n",
"- $\\text{sig}(u)=\\frac{e^u}{1+e^u}$\n",
"- $\\text{softmax}({\\boldsymbol u})=\\text{softmax}([u_1,u_2,\\dots,u_k])=\\big[ \\frac{e^{u_1}}{e^{u_1}+\\dots e^{u_k}},\\dots,\\frac{e^{u_k}}{e^{u_1}+\\dots e^{u_k}}\\big]$\n",
"\n",
"`-` torch.nn.Softmax() 손계산\n",
"\n",
"(예시1) – 잘못계산"
],
"id": "045583e4-1daa-4741-85ec-31158b00d8ee"
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"softmax = torch.nn.Softmax(dim=0)"
],
"id": "4d3ee620-908d-4a66-9c2e-314f7ecfadce"
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"netout = torch.tensor([[-2.0,-2.0,0.0],\n",
" [3.14,3.14,3.14],\n",
" [0.0,0.0,2.0],\n",
" [2.0,2.0,4.0],\n",
" [0.0,0.0,0.0]])\n",
"netout"
],
"id": "e6c35f4f-9b07-4de6-b7bb-6b8a09b9490c"
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"softmax(netout) "
],
"id": "e65a43be-188d-4304-a8b5-ba766136bee6"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시2) – 이게 맞게 계산되는 것임"
],
"id": "197a1c34-0b43-4822-b385-8486fff3c97d"
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"softmax = torch.nn.Softmax(dim=1)"
],
"id": "bab3e4f5-2796-4399-b223-d910ea182e72"
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"netout"
],
"id": "0dafa544-0d9e-4977-8bb7-da1c945e0bb7"
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"softmax(netout)"
],
"id": "525e3435-eefa-49d9-82a8-13cb40571046"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시3) – 차원을 명시안하면 맞게 계산해주고 경고 줌"
],
"id": "467c25de-c9a9-47da-9575-33888a4bb85f"
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"softmax = torch.nn.Softmax()"
],
"id": "1c7c8926-7e1e-4994-a04c-4ca3ea3f14a3"
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"netout"
],
"id": "5e59a46d-e2c1-4247-aae3-ff6171bb1d17"
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/home/cgb3/anaconda3/envs/dl2024/lib/python3.11/site-packages/torch/nn/modules/module.py:1511: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n",
" return self._call_impl(*args, **kwargs)"
]
}
],
"source": [
"softmax(netout)"
],
"id": "040d3bb0-49d1-4bc4-9ffb-eaadbd1228bc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(예시4) – 진짜 손계산"
],
"id": "a862b14f-43ec-4fba-b8b4-01f7997f3822"
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"netout "
],
"id": "e80c623f-eab4-4324-a079-16252ece7706"
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.exp(netout)"
],
"id": "9551d3b6-a6c4-4d6a-a402-8be14fe1c0d1"
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"0.1353/(0.1353 + 0.1353 + 1.0000), 0.1353/(0.1353 + 0.1353 + 1.0000), 1.0000/(0.1353 + 0.1353 + 1.0000) # 첫 obs"
],
"id": "694b5993-06b0-469b-a8aa-dfb6ef26a9af"
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.exp(netout[1])/torch.exp(netout[1]).sum() # 두번째 obs "
],
"id": "f7e12995-da3a-4c23-8146-301dbaec52dc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## D. CrossEntropyLoss\n",
"\n",
"`-` 수식\n",
"\n",
"***`# 2개의 카테고리`***\n",
"\n",
"`-` 예제1: BCELoss vs BCEWithLogisticLoss"
],
"id": "0d41ecf2-6b6e-431d-8dbb-cdeef0ed7072"
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"y = torch.tensor([0,0,1]).reshape(-1,1).float()\n",
"netout = torch.tensor([-1, 0, 1]).reshape(-1,1).float()\n",
"y,netout"
],
"id": "accd1529-6526-4a8f-85a2-e068d09f025b"
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# 계산방법1: 공식암기\n",
"sig = torch.nn.Sigmoid()\n",
"yhat = sig(netout)\n",
"- torch.sum(torch.log(yhat)*y + torch.log(1-yhat)*(1-y))/3"
],
"id": "9dfb02cb-1749-4391-8446-fdec0734f6cb"
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# 계산방법2: torch.nn.BCELoss() 이용\n",
"sig = torch.nn.Sigmoid()\n",
"yhat = sig(netout)\n",
"loss_fn = torch.nn.BCELoss()\n",
"loss_fn(yhat,y)"
],
"id": "736829af-f7ab-440d-82b5-768c60bea69a"
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# 계산방법3: torch.nn.BCEWithLogitsLoss() 이용\n",
"loss_fn = torch.nn.BCEWithLogitsLoss()\n",
"loss_fn(netout,y)"
],
"id": "244f971b-a33a-46b5-9c99-38e4e9638ede"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 예제2: BCEWithLogisticLoss vs CrossEntropyLoss"
],
"id": "3264841c-60cb-40a1-9b17-0ddc7a60fa94"
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.concat([sig(netout),1-sig(netout)],axis=1)"
],
"id": "7ff6ff61"
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"netout = torch.tensor([[3,2],[2,2],[5,6]]).float()\n",
"y = torch.tensor([[1,0],[1,0],[0,1]]).float()\n",
"y,netout #,netout[:,[1]]-netout[:,[0]]"
],
"id": "e54ce802-ab28-4f1b-b061-462feb61baf9"
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"softmax(netout)"
],
"id": "fcb10b2a"
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# 계산방법1: 공식암기\n",
"-torch.sum(torch.log(softmax(netout))*y)/3"
],
"id": "2cc88737-fd06-450d-ad23-0084d1924e71"
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# 계산방법2: torch.nn.CrossEntropyLoss() 이용 + y는 one-hot으로 정리\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"loss_fn(netout,y)"
],
"id": "992b1412-3913-4ca1-87e7-829c2951658d"
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# 계산방법3: torch.nn.CrossEntropyLoss() 이용 + y는 0,1 로 정리\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"loss_fn(netout,y)"
],
"id": "090abc37-f55c-42ae-8116-4e34097f2b78"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`#`\n",
"\n",
"***`# 3개의 카테고리`***"
],
"id": "2c1cd3d4-a94a-4569-b1ed-c0a146140a03"
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"y = torch.tensor([2,1,2,2,0])\n",
"y_onehot = torch.nn.functional.one_hot(y)\n",
"netout = torch.tensor(\n",
" [[-2.0000, -2.0000, 0.0000],\n",
" [ 3.1400, 3.1400, 3.1400],\n",
" [ 0.0000, 0.0000, 2.0000],\n",
" [ 2.0000, 2.0000, 4.0000],\n",
" [ 0.0000, 0.0000, 0.0000]]\n",
")\n",
"y,y_onehot"
],
"id": "548b72d7-3caa-43be-83fa-c920eafb9654"
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## 방법1 -- 추천X\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"loss_fn(netout,y_onehot.float())"
],
"id": "01854de7-1bf6-424e-8365-d7a99e74994f"
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## 방법2 -- 추천O\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"loss_fn(netout,y)"
],
"id": "ea9ac430-21df-4477-90ed-f875e53b9316"
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## 방법3 -- 공식.. (이걸 쓰는사람은 없겠지?)\n",
"softmax = torch.nn.Softmax() \n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"- torch.sum(torch.log(softmax(netout))*y_onehot)/5"
],
"id": "386860b6-e2ce-49e9-8bda-dccab3f625ae"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`#`\n",
"\n",
"`-` 계산하는 공식을 아는것도 중요한데 torch.nn.CrossEntropyLoss() 에는\n",
"softmax 활성화함수가 이미 포함되어 있다는 것을 확인하는 것이 더 중요함.\n",
"\n",
"`-` torch.nn.CrossEntropyLoss() 는 사실 torch.nn.CEWithSoftmaxLoss()\n",
"정도로 바꾸는 것이 더 말이 되는 것 같다.\n",
"\n",
"## E. Minor Topic: 이진분류와 CrossEntropy\n",
"\n",
"`-` 2개의 클래스일경우에도 CrossEntropy를 쓸 수 있지 않을까?"
],
"id": "137913c8-e211-400d-8e9e-29a061b5e8d6"
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data(fastai.data.external.URLs.MNIST)\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X = torch.concat([X0,X1]).reshape(-1,1*28*28)/255\n",
"y = torch.tensor([0]*len(X0) + [1]*len(X1))\n",
"## Step2: 학습가능한 오브젝트 생성\n",
"torch.manual_seed(43052)\n",
"net = torch.nn.Sequential(\n",
" torch.nn.Linear(784,32),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(32,2),\n",
" #torch.nn.Softmax()\n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"## Step3: fit \n",
"for epoc in range(70): \n",
" ## 1 \n",
" ## 2 \n",
" loss= loss_fn(net(X),y) \n",
" ## 3 \n",
" loss.backward()\n",
" ## 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad() \n",
"## Step4: Predict \n",
"softmax = torch.nn.Softmax()\n",
"(net(X).argmax(axis=1) == y).float().mean()"
],
"id": "f3ebe3ec-d6b4-4f39-8ba7-84185ac104f2"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 이진분류문제 = “y=0 or y=1” 을 맞추는 문제 = 성공과 실패를 맞추는\n",
"문제 = 성공확률과 실패확률을 추정하는 문제\n",
"\n",
"`-` softmax, sigmoid\n",
"\n",
"- softmax: (실패확률, 성공확률) 꼴로 결과가 나옴 // softmax는\n",
" 실패확률과 성공확률을 둘다 추정한다.\n",
"- sigmoid: (성공확률) 꼴로 결과가 나옴 // sigmoid는 성공확률만\n",
" 추정한다.\n",
"\n",
"`-` 그런데 “실패확률=1-성공확률” 이므로 사실상 둘은 같은걸 추정하는\n",
"셈이다. (성공확률만 추정하면 실패확률은 저절로 추정되니까)\n",
"\n",
"`-` 즉 아래는 같은 표현력을 가진 모형이다.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"`-` 둘은 같은 표현력을 가진 모형인데 학습할 파라메터는 sigmoid의 경우가\n",
"더 적다. $\\to$ sigmoid를 사용하는 모형이 비용은 싸고 효과는 동일하다는\n",
"말 $\\to$ 이진분류 한정해서는 softmax를 쓰지말고 sigmoid를 써야함.\n",
"\n",
"- softmax가 갑자기 너무 안좋아보이는데 sigmoid는 k개의 클래스로 확장이\n",
" 불가능한 반면 softmax는 확장이 용이하다는 장점이 있음.\n",
"\n",
"## F. 정리\n",
"\n",
"`-` 결론\n",
"\n",
"1. 소프트맥스는 시그모이드의 확장이다.\n",
"2. 클래스의 수가 2개일 경우에는 (Sigmoid, BCEloss) 조합을 사용해야 하고\n",
" 클래스의 수가 2개보다 클 경우에는 (Softmax, CrossEntropyLoss) 를\n",
" 사용해야 한다.\n",
"\n",
"`-` 그런데 사실.. 클래스의 수가 2개일 경우일때 (Softmax,\n",
"CrossEntropyLoss)를 사용해도 그렇게 큰일나는것은 아니다. (그냥 좀\n",
"비효율적인 느낌이 드는 것 뿐임. 흑백이미지를 칼라잉크로 출력하는 느낌)\n",
"\n",
"***참고***\n",
"\n",
"| $y$ | 분포가정 | 마지막층의 활성화함수 | 손실함수 |\n",
"|:-------------------------------:|:-------------------------------:|:---------------------:|:-------------:|\n",
"| 3.45, 4.43, … (연속형) | 정규분포 | None (or Identity) | MSE |\n",
"| 0 or 1 | 이항분포 with $n=1$ (=베르누이) | Sigmoid | BCE |\n",
"| \\[0,0,1\\], \\[0,1,0\\], \\[1,0,0\\] | 다항분포 with $n=1$ | Softmax | Cross Entropy |\n",
"\n",
"# 6. HW\n",
"\n",
"아래와 같은 자료가 있다."
],
"id": "abaf0dce-3ddf-4b4d-8052-17f90c314836"
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"## Step1: 데이터준비 \n",
"path = fastai.data.external.untar_data('https://s3.amazonaws.com/fast-ai-imageclas/mnist_png.tgz')\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X = torch.concat([X0,X1]).reshape(-1,1*28*28)/255\n",
"y = torch.tensor([0]*len(X0) + [1]*len(X1))"
],
"id": "46503051-c102-43ea-853a-9d369fd6d82b"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`(1)` 세부사항에 맞추어 위의 자료를 학습하고, accuracy를 구하라.\n",
"\n",
"- 네트워크는 1개의 은닉층을 가지도록 하고, 은닉노드수는 32개로\n",
" 설정하라. 은닉층의 활성화함수는 ReLU로 설정하라.\n",
"- 손실함수를 `torch.nn.BCELoss()`로 설정하라.\n",
"- epoch = 325로 설정하라.\n",
"\n",
"`(2)` 세부사항에 맞추어 위의 자료를 학습하고, accuracy를 구하라.\n",
"\n",
"- 네트워크는 1개의 은닉층을 가지도록 하고, 은닉노드수는 32개로\n",
" 설정하라. 은닉층의 활성화함수는 ReLU로 설정하라.\n",
"- 손실함수를 `torch.nn.BCEWithLogitsLoss()`로 설정하라.\n",
"- epoch = 325로 설정하라.\n",
"\n",
"`(3)` 세부사항에 맞추어 위의 자료를 학습하고, accuracy를 구하라.\n",
"\n",
"- 네트워크는 1개의 은닉층을 가지도록 하고, 은닉노드수는 32개로\n",
" 설정하라. 은닉층의 활성화함수는 ReLU로 설정하라.\n",
"- y를 one_hot 인코딩하라.\n",
"- 손실함수를 `torch.nn.CrossEntropyLoss()`로 설정하라.\n",
"- epoch = 325로 설정하라.\n",
"\n",
"**hint** 원핫인코딩을 위해 아래의 함수를 사용하라."
],
"id": "49c2279f-b7cf-491a-a904-b750dc4a7de5"
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"y, torch.nn.functional.one_hot(y)"
],
"id": "b8229bc2-780f-46da-853a-2adf85dde805"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`(4)` 세부사항에 맞추어 위의 자료를 학습하고, accuracy를 구하라.\n",
"\n",
"- 네트워크는 1개의 은닉층을 가지도록 하고, 은닉노드수는 32개로\n",
" 설정하라. 은닉층의 활성화함수는 ReLU로 설정하라.\n",
"- y를 (one-hot 인코딩 하지 않고) lenght-$n$인 벡터로 유지하라.\n",
"- 손실함수를 `torch.nn.CrossEntropyLoss()`로 설정하라.\n",
"- epoch = 325로 설정하라.\n",
"\n",
"`(5)` 세부사항에 맞추어 위의 자료를 학습하고, accuracy를 구하라.\n",
"\n",
"- 네트워크는 1개의 은닉층을 가지도록 하고, 은닉노드수는 32개로\n",
" 설정하라. 은닉층의 활성화함수는 ReLU로 설정하라.\n",
"- batch_size = 1024 로 설정한뒤 mini_batch를 이용한 학습을 하라.\n",
"- y를 (one-hot 인코딩 하지 않고) lenght-$n$인 벡터로 유지하라. \n",
"- 손실함수를 `torch.nn.CrossEntropyLoss()`로 설정하라.\n",
"- 총 iteration 수가 325가 되도록 적절하게 epoch 을 설정하라.\n",
"\n",
"`(6)` 세부사항에 맞추어 위의 자료를 학습하고, accuracy를 구하라.\n",
"\n",
"- 네트워크는 1개의 은닉층을 가지도록 하고, 은닉노드수는 32개로\n",
" 설정하라. 은닉층의 활성화함수는 ReLU로 설정하라.\n",
"- batch_size = 512 로 설정한뒤 mini_batch를 이용한 학습을 하라.\n",
"- y를 (one-hot 인코딩 하지 않고) lenght-$n$인 벡터로 유지하라.\n",
"- 손실함수를 `torch.nn.CrossEntropyLoss()`로 설정하라.\n",
"- 총 iteration 수가 325가 되도록 적절하게 epoch 을 설정하라.\n",
"- GPU를 활용하여 학습하라."
],
"id": "aae11b50-2f3d-4dd1-acc0-57ea3f347e77"
}
],
"nbformat": 4,
"nbformat_minor": 5,
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3 (ipykernel)",
"language": "python"
},
"language_info": {
"name": "python",
"codemirror_mode": {
"name": "ipython",
"version": "3"
},
"file_extension": ".py",
"mimetype": "text/x-python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.8"
}
}
}