<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ディープラーニング – AichiLog</title>
	<atom:link href="https://aichi.blog/tag/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://aichi.blog</link>
	<description>学びて富み　富みて学ぶ</description>
	<lastBuildDate>Sat, 31 May 2025 05:31:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://aichi.blog/wp-content/uploads/2021/12/cropped-915AB649-D1E9-4810-9658-CB8CE1B605FD.JPEG-2-32x32.jpeg</url>
	<title>ディープラーニング – AichiLog</title>
	<link>https://aichi.blog</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://aichi.blog/tag/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0/feed/"/>
	<item>
		<title>【Kaggle】Kaggle Notebook を Docker を用いてローカル環境で構築する手順と作成方法</title>
		<link>https://aichi.blog/kaggle-notebook/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kaggle-notebook</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Sat, 29 Mar 2025 14:49:42 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Kaggle]]></category>
		<category><![CDATA[ディープラーニング]]></category>
		<category><![CDATA[機械学習]]></category>
		<guid isPermaLink="false">https://aichi.blog/kaggle-notebook/</guid>

					<description><![CDATA[<p>今回の記事では、Kaggle Notebook をローカル環境で構築する手順と作成方法を解説します。 目次 実現することディレクトリ構成手順Kaggle API のコマンドコンペデータのダウンロードコンペに提出提出履歴ノ [&#8230;]</p>
<p>The post <a href="https://aichi.blog/kaggle-notebook/">【Kaggle】Kaggle Notebook を Docker を用いてローカル環境で構築する手順と作成方法</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>今回の記事では、Kaggle Notebook をローカル環境で構築する手順と作成方法を解説します。</p>
<p>
  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">実現すること</a></li><li><a href="#toc2" tabindex="0">ディレクトリ構成</a></li><li><a href="#toc3" tabindex="0">手順</a></li><li><a href="#toc4" tabindex="0">Kaggle API のコマンド</a><ol><li><a href="#toc5" tabindex="0">コンペデータのダウンロード</a></li><li><a href="#toc6" tabindex="0">コンペに提出</a></li><li><a href="#toc7" tabindex="0">提出履歴</a></li><li><a href="#toc8" tabindex="0">ノートブックの取得コマンド</a></li></ol></li><li><a href="#toc9" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">実現すること</span></h2>
</p>
<ul>
<li>kaggle API を使用可能に（notebook やデータセットのダウンロードなど）</li>
<li>起動後すぐに Jupyter を使用可能</li>
<li>ローカルとコンテナ間で<code>/working</code>ディレクトリを同期</li>
</ul>
<h2><span id="toc2">ディレクトリ構成</span></h2>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-" data-lang="" data-show-lang="1"><code class="language-" data-hcb-clip="0">kaggle/
├── Dockerfile
├── docker-compose.yml
├── kaggle.json              # Kaggle API Key（手動で配置）
├── requirements.txt         # 必要なパッケージを記載
├── working/                 # Kaggleプロジェクト作業ディレクトリ
└── input/                   # コンペデータ配置用（自動でコンテナ内にマウント）</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;0&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h2><span id="toc3">手順</span></h2>
</p>
<p><h4>1. ディレクトリを作成</h4>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="1">mkdir kaggle
cd kaggle

touch Dockerfile docker-compose.yml
mkdir working input</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;1&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h4>2. kaggle API Key を取得</h4>
</p>
<p>Kaggle サイトにアクセスして、API Key を取得してください。<code>.json</code>ファイルがダウンロードされるので、名前を<code>kaggle.json</code>に変更して、<code>kaggle</code>ディレクトリに配置してください。</p>
<p><h4>3. requirements.txt を作成</h4>
</p>
<p>必要なパッケージを記載してください。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-" data-lang="" data-show-lang="1"><code class="language-" data-hcb-clip="2">numpy
pandas
matplotlib
scikit-learn
seaborn</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;2&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h4>4. Dockerfile を作成</h4>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-dockerfile" data-lang="dockerfile" data-show-lang="1"><code class="language-dockerfile" data-hcb-clip="3">FROM gcr.io/kaggle-gpu-images/python:latest

# Kaggle CLI用APIキーを配置
COPY kaggle.json /root/.kaggle/kaggle.json
RUN chmod 600 /root/.kaggle/kaggle.json

# requirements.txt のコピーとインストール
COPY requirements.txt /kaggle/requirements.txt
RUN pip install --no-cache-dir -r /kaggle/requirements.txt

# Jupyter用のカーネルをインストール
RUN pip install ipykernel
RUN python -m ipykernel install --user --name kaggle-env --display-name "Python (Kaggle)"

# デフォルトディレクトリの作成
RUN mkdir -p /kaggle/input /kaggle/working

# 作業ディレクトリを設定（docker exec -it kaggle bash をした際に、このディレクトリが開かれる）
WORKDIR /kaggle/working

# Jupyterを起動できるようにポートを空けておく
EXPOSE 8888

# 起動時にJupyterを自動起動
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--allow-root", "--NotebookApp.token=''", "--NotebookApp.password=''"]</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;3&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h4>5. docker-compose.yml を作成</h4>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-yaml" data-lang="yaml" data-show-lang="1"><code class="language-yaml" data-hcb-clip="4">version: "3.9"

services:
  kaggle:
    platform: linux/amd64 # Apple Siliconで起動する際に必要
    build: .
    container_name: kaggle
    ports:
      - "8888:8888"
    volumes:
      - ./working:/kaggle/working
      - ./input:/kaggle/input
    tty: true
    stdin_open: true</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;4&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h4>6. コンテナを起動</h4>
</p>
<p>ここで注意が必要です。</p>
<p>最初に Docker デスクトップを起動し、歯車アイコンをクリック。<code>Resources</code>タブをクリックし、<code>Virtual Machines</code>の値を変更してください。</p>
<p><img decoding="async" src="https://aichi.blog/wp-content/uploads/2025/05/docker-setting-1.png" alt="docker-setting"></p>
<p>僕の場合、136 にしました。参考までに。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="5">docker compose up -d</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;5&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p>コマンドが終了するまで、結構時間がかかりますので、気長に待ちましょう。</p>
<p><h4>7. コンテナに接続</h4>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="6">docker exec -it kaggle bash
jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token=''
# --ip=0.0.0.0 : すべてのIPからのアクセスを許可
# --port=8888 : ポート番号を指定
# --allow-root : ルートユーザーでの起動を許可（Dockerでは必要）
# --NotebookApp.token='' : 認証トークンなしでアクセス可（セキュリティ注意）</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;6&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><code>/kaggle/working</code>ディレクトリが開かれます。こちらで、jupyter notebook を作成することができます！</p>
<p><h2><span id="toc4">Kaggle API のコマンド</span></h2>
</p>
<p>以下に、Kaggle API のコマンドをまとめました。<br />
詳しい情報は公式ドキュメントを参照してください。</p>
<p><h3><span id="toc5">コンペデータのダウンロード</span></h3>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="7">kaggle competitions download -c &lt;コンペ名&gt; -p &lt;保存先パス&gt;
kaggle competitions download -c titanic -p /kaggle/input/titanic
unzip ファイル名.zip -d 解凍先パス</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;7&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h3><span id="toc6">コンペに提出</span></h3>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="8">kaggle competitions submit -c &lt;コンペ名&gt; -f &lt;提出ファイル&gt; -m "&lt;コメント&gt;"
kaggle competitions submit -c titanic -f submission.csv -m "1st submission"</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;8&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h3><span id="toc7">提出履歴</span></h3>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="9">kaggle competitions submissions -c &lt;コンペ名&gt;</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;9&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h3><span id="toc8">ノートブックの取得コマンド</span></h3>
</p>
<div class="hcb_wrap">
<pre class="prism line-numbers language-shell" data-lang="shell" data-show-lang="1"><code class="language-shell" data-hcb-clip="10">kaggle kernels pull &lt;username&gt;/&lt;notebook-name&gt;</code></pre>
<p><button class="hcb-clipboard" data-clipboard-target="[data-hcb-clip=&quot;10&quot;]" data-clipboard-action="copy" aria-label="コードをクリップボードにコピーする"></button></div>
<p><h2><span id="toc9">まとめ</span></h2>
</p>
<p>Kaggle Notebook をローカル環境で構築する手順と作成方法を解説しました。<br />
こちらのプロジェクトで実現できることは、</p>
<ul>
<li>kaggle API を使用可能に（notebook やデータセットのダウンロードなど）</li>
<li>起動後すぐに Jupyter を使用可能</li>
<li>ローカルとコンテナ間で<code>/working</code>ディレクトリを同期</li>
</ul>
<p>です。</p>
<p>参考になれば幸いです。</p><p>The post <a href="https://aichi.blog/kaggle-notebook/">【Kaggle】Kaggle Notebook を Docker を用いてローカル環境で構築する手順と作成方法</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ディープラーニング入門：ニューラルネットワークと Pytorch を活用した学習の仕組み</title>
		<link>https://aichi.blog/deeplearning-intro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=deeplearning-intro</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Tue, 25 Feb 2025 14:50:51 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Pytorch]]></category>
		<category><![CDATA[ディープラーニング]]></category>
		<category><![CDATA[機械学習]]></category>
		<guid isPermaLink="false">https://aichi.blog/deeplearning-intro/</guid>

					<description><![CDATA[<p>目次 ディープラーニングとは？モデルとディープラーニングモデルの種類全結合層（Fully Connected Layer）教師あり学習Pytorch で全結合層を作成する方法DL でよく使用する計算線形変換非線形変換代表 [&#8230;]</p>
<p>The post <a href="https://aichi.blog/deeplearning-intro/">ディープラーニング入門：ニューラルネットワークと Pytorch を活用した学習の仕組み</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>
  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ディープラーニングとは？</a></li><li><a href="#toc2" tabindex="0">モデルとディープラーニング</a></li><li><a href="#toc3" tabindex="0">モデルの種類</a></li><li><a href="#toc4" tabindex="0">全結合層（Fully Connected Layer）</a></li><li><a href="#toc5" tabindex="0">教師あり学習</a><ol><li><a href="#toc6" tabindex="0">Pytorch で全結合層を作成する方法</a></li></ol></li><li><a href="#toc7" tabindex="0">DL でよく使用する計算</a></li><li><a href="#toc8" tabindex="0">線形変換</a></li><li><a href="#toc9" tabindex="0">非線形変換</a><ol><li><a href="#toc10" tabindex="0">代表的な活性化関数</a></li></ol></li><li><a href="#toc11" tabindex="0">目的関数（損失関数・コスト関数）</a></li><li><a href="#toc12" tabindex="0">逆伝播とパラメータの更新</a><ol><li><a href="#toc13" tabindex="0">最急降下法（SGD: 確率的勾配降下法）</a></li></ol></li><li><a href="#toc14" tabindex="0">Pytorch によるニューラルネットワークの実装</a><ol><li><a href="#toc15" tabindex="0">全結合層の作成</a></li><li><a href="#toc16" tabindex="0">乱数のシードを固定</a></li><li><a href="#toc17" tabindex="0">テンソルの作成</a></li><li><a href="#toc18" tabindex="0">線形変換の計算</a></li><li><a href="#toc19" tabindex="0">非線形変換（ReLU 関数）</a></li><li><a href="#toc20" tabindex="0">目的関数の計算</a></li></ol></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">ディープラーニングとは？</span></h2>
</p>
<p>ディープラーニング（DL）とは、ニューラルネットワークの層を深くしたものです。ニューラルネットワークとは、人間の脳の神経回路（ニューロン）の仕組みをモデルにした機械学習アルゴリズムです。このニューラルネットワークを多層にし、データのパターンを学習することで、高度な予測や分類を可能にします。</p>
<p><h2><span id="toc2">モデルとディープラーニング</span></h2>
</p>
<p>DL の中には、モデルという概念があります。モデルとは、プログラミングにおける関数のようなもので、入力を受け取り、出力を返すものです。<br />
最初、モデルはデタラメな出力を返します。そして、このモデルを学習させていくことで、「<strong>未知のデータ</strong>に対する予測精度(能力)が高いモデル」を作っていく。これが DL です。</p>
<p><h2><span id="toc3">モデルの種類</span></h2>
</p>
<p>モデルには様々な種類があります。中でも有名なのは以下の３つです。</p>
<ul>
<li><strong>MLP</strong>(Multi Layer Perceptron, 多層パーセプトロン)：他の DL のベースとなっているモデル</li>
<li><strong>CNN</strong>(Convolutional Neural Network, 畳み込みニューラルネットワーク)：画像分野に特化したモデル</li>
<li><strong>RNN</strong>(Recurrent Neural Network, 再帰型ニューラルネットワーク)：自然言語処理に特化したモデル</li>
</ul>
<p>この記事では、最も基本である MLP について解説します。</p>
<p><h2><span id="toc4">全結合層（Fully Connected Layer）</span></h2>
</p>
<p>MLP は 3 つの層で構成されます。</p>
<p>1. <strong>入力層</strong>: データの入り口（例: 「部屋の広さ」「築年数」「駅からの距離」）<br />
2. <strong>中間層（隠れ層）</strong>: データを加工する層（hidden layer）<br />
3. <strong>出力層</strong>: 予測結果（例: 「家賃」）</p>
<p>MLP では、入力層から出力層まで、ノードを重ねて計算を行います。<br />
その際に、以下の 3 つの要素を用いて計算を行います。</p>
<li><strong>バイアス項</strong>: ノードの入力に加算される定数</li>
<li><strong>パラメータ（重み）</strong>: ノード間のつながりの強さを表す値</li>
<li><strong>エッジ</strong>: ノード同士をつなぐ線</li>
<p>各層のバイアス項とパラメータを掛けて計算を行ったノードたちを重ねていくことで、出力層で予測結果を出すことができます。</p>
<p><h2><span id="toc5">教師あり学習</span></h2>
</p>
<p>MLP は基本的に「教師あり学習」として分類されます。「教師あり学習」とは、入力データとそれに対する正解データを用いて、モデルを学習させる手法です。</p>
<p>また、教師あり学習には以下の 2 種類があります。</p>
<li><strong>回帰（連続値）</strong>: 数値を予測する（家賃や株価などの数値予測）</li>
<li><strong>分類（離散値）</strong>: カテゴリーを分類する（画像認識（犬か猫か））</li>
<p>今回は、回帰の例を用いて解説します。</p>
<p><h3><span id="toc6">Pytorch で全結合層を作成する方法</span></h3>
</p>
<pre><code class="language-python">import torch.nn as nn
nn.Linear(入力ノード数, 出力ノード数)</code></pre>
<p><code>入力層が3つ</code>、<code>中間層が2つ</code>、<code>出力層が1つ</code>の場合は、以下のように記述します。</p>
<pre><code class="language-python">nn.Linear(3, 2)
nn.Linear(2, 1)</code></pre>
<p><h2><span id="toc7">DL でよく使用する計算</span></h2>
</p>
<p>1. <strong>線形変換</strong>（ノードを重ねる際にウェイトをかける）</p>
<ul>
<li>名前にあるように、線（一次関数）に変換可能な計算で使用</li>
<li>「入力層->中間層」「中間層->出力層」までのノードを重ねる際に使用</li>
</ul>
<p>2. <strong>非線形変換</strong>（活性化関数を適用）</p>
<ul>
<li>線形変換では、線に変換可能な計算であるため、ニューラルネットワークの表現力が低い</li>
<li>非線形変換を適用することで、ニューラルネットワークの表現力を高めることができる</li>
<li>代表的な活性化関数には、ReLU 関数、シグモイド関数、ソフトマックス関数などがある</li>
<li>これらは、「中間層」で使用される</li>
</ul>
<p>3. <strong>目的関数（損失関数）を計算</strong>（予測値と正解値の誤差を計算）</p>
<ul>
<li>予測値と正解値の誤差を計算することで、モデルの学習を行う</li>
<li>これらは、「出力層」で使用される</li>
</ul>
<p><strong>順伝播</strong>: 入力層 → 出力層のデータの流れ<br />
<strong>逆伝播</strong>: 出力層 → 入力層のデータの流れ（誤差の修正）</p>
<p><h2><span id="toc8">線形変換</span></h2>
</p>
<p>線形変換は、ノードを重ねる際に、ウェイト（パラメータ）を掛ける計算です。<br />
主に、「入力層->中間層」「中間層->出力層」までのノードを重ねる際に使用されます。</p>
<p><strong>計算式:</strong></p>
<pre><code class="language-math">y = Wx + b</code></pre>
<ul>
<li><code>y</code>: 出力値</li>
<li><code>W</code>: ウェイト（パラメータ）</li>
<li><code>x</code>: 入力値</li>
<li><code>b</code>: バイアス</li>
</ul>
<h2><span id="toc9">非線形変換</span></h2>
</p>
<p>これは、「中間層」で使用される計算です。<br />
イメージとしては、線形変換では、線に変換可能な計算であるため、バラバラになっているノードを線に変換するのは難しいです。<br />
そのため、バラバラになっているノードを多次元関数のような線に変換するために、非線形変換を使用します。<br />
そうすることで、ノード内のデータを忠実に表現することができます。</p>
<p>また、非線形変換は、<strong>活性化関数</strong>を使用します。</p>
<p><h3><span id="toc10">代表的な活性化関数</span></h3>
</p>
<li><strong>シグモイド関数</strong>: 勾配消失問題があり、現在はほとんど使われない</li>
<li><strong>ReLU 関数（正規化線形関数）</strong>: 現在最もよく使われる活性化関数</li>
<li><strong>ソフトマックス関数</strong>: 出力層で使用される確率分布を求める関数</li>
<h2><span id="toc11">目的関数（損失関数・コスト関数）</span></h2>
</p>
<p>予測値と目標値の誤差を測定する関数。</p>
<li><strong>回帰</strong>: 平均二乗誤差（MSE: Mean Squared Error）</li>
<li><strong>分類</strong>: 交差エントロピー誤差（Cross Entropy Error）</li>
<h2><span id="toc12">逆伝播とパラメータの更新</span></h2>
</p>
<p>MLP において、一番重要といっても良いのが、<strong>逆伝播</strong>と<strong>パラメータの更新</strong>です。</p>
<p>これまでの計算で生じた、誤差を修正し、適切なパラーメターに更新してあげることで、ニューラルネットワークの精度を高めることができます。</p>
<p>この計算を行うためには、<strong>最急降下法</strong>と<strong>誤差逆伝播法</strong>を用います。</p>
<p><h3><span id="toc13">最急降下法（SGD: 確率的勾配降下法）</span></h3>
</p>
<li>勾配を求め、勾配方向にパラメータを更新</li>
<li>勾配が 0 になる点で更新を停止</li>
<li>ただ、多次元関数のように、複数の傾きが０になる点が存在する場合、最も小さい点である「大域的最適解」ではなく、「居所最適解」に陥る可能性がある</li>
<li>また、勾配が大きすぎて、パラメータの更新がうまくいかず、勾配が 0 になってしまう「勾配爆発」という危険性もある</li>
<li>そのために、勾配を小さくする工夫が必要で、「学習係数（0.01）」を勾配にかけてあげることで、勾配を小さくすることができる</li>
<h2><span id="toc14">Pytorch によるニューラルネットワークの実装</span></h2>
</p>
<p><h3><span id="toc15">全結合層の作成</span></h3>
</p>
<pre><code class="language-python">import torch.nn as nn
fc = nn.Linear(3, 2)
fc.weight  # 重み
fc.bias    # バイアス</code></pre>
<p><h3><span id="toc16">乱数のシードを固定</span></h3>
</p>
<p>DL を行う際、デフォルトでは、ランダムな値を用いて計算を行います。<br />
以下のように、乱数のシードを固定することで、同じ結果を得ることができます。</p>
<pre><code class="language-python">import torch
torch.manual_seed(0)</code></pre>
<p><h3><span id="toc17">テンソルの作成</span></h3>
</p>
<p>テンソルは、Pytorch で用いられるデータの型です。<br />
Pytorch で計算を行う際は、テンソルを用いる必要があります。</p>
<pre><code class="language-python">x = torch.tensor([1., 2., 3.])
print(x)  # tensor([1., 2., 3.])
print(type(x))  # torch.Tensor
print(x.dtype)  # torch.float32</code></pre>
<p><h3><span id="toc18">線形変換の計算</span></h3>
</p>
<pre><code class="language-python">fc = nn.Linear(3, 2)
u = fc(x)
print(u)  # tensor([-0.1261, -0.1261], grad_fn=&lt;AddBackward0&gt;)</code></pre>
<p><h3><span id="toc19">非線形変換（ReLU 関数）</span></h3>
</p>
<pre><code class="language-python">import torch.nn.functional as F
fc = nn.Linear(3, 2)
u = fc(x)
h = F.relu(u)
print(h)  # tensor([0.00000, 0.0526], grad_fn=&lt;ReluBackward0&gt;)</code></pre>
<p>ReLU 関数は <code>max(0, x)</code> を計算し、0 以下の値を 0 に変換します。</p>
<p><h3><span id="toc20">目的関数の計算</span></h3>
</p>
<pre><code class="language-python"># 目標値
t = torch.tensor([1., 3.])</code></pre>
<pre><code class="language-python"># 予測値
y = torch.tensor([2., 4.])</code></pre>
<pre><code class="language-python"># 平均二乗誤差
mse = F.mse_loss(y, t)
print(mse)  # tensor(1.0000)</code></pre>
<p><h2><span id="toc21">まとめ</span></h2>
</p>
<li><strong>ディープラーニングはニューラルネットワークの層を深くしたもの</strong></li>
<li><strong>順伝播と逆伝播を繰り返しながらパラメータを更新する</strong></li>
<li><strong>Pytorch を使って簡単にニューラルネットワークを構築できる</strong></li>
<p>Pytorch を活用しながら、ディープラーニングの理解を深めていきましょう！</p><p>The post <a href="https://aichi.blog/deeplearning-intro/">ディープラーニング入門：ニューラルネットワークと Pytorch を活用した学習の仕組み</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
