「PyTorch入門:ビジュアルガイド」

2026/02/13 21:59

「PyTorch入門:ビジュアルガイド」

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

提供された要約は明確で簡潔であり、主要ポイントのリストと完全に一致しているため、そのまま繰り返すことができます。

本文

PyTorch入門

わかりやすいビジュアルで学べる紹介。
2026年2月10日


目次

  • PyTorchとは何か
  • テンソルの基礎
  • 自動微分(Autograd)
  • Autograd実践例
  • 単純なニューラルネットワークを構築する
  • YouTube

PyTorchとは?

PyTorchは最も人気のあるディープラーニングフレームワークの一つです。Meta AIが管理し、Linux Foundationの一部として継続的にメンテナンスされているTorchライブラリをベースに構築されたオープンソースライブラリです。


テンソルの基礎

機械学習は数値で成り立っています。テンソルとは、PyTorchで扱う数値を格納するための特別なコンテナ―実質的には強力な配列です。

なぜテンソルなのか?

  • 学習データを保持できる
  • さまざまな組み込み演算が利用可能(例:
    torch.rand()
    torch.randn()
    torch.ones()
import torch

rand_sample      = torch.rand(10000)
randn_sample     = torch.randn(10000)
zeros_sample     = torch.zeros(10)
ones_sample      = torch.ones(10)
arange_sample    = torch.arange(0, 10)
linspace_sample  = torch.linspace(0, 10, steps=5)
full_sample      = torch.full((10,), 42)
empty_sample     = torch.empty(10)
eye_sample       = torch.eye(5)
関数説明
torch.rand()
0〜1の一様乱数
torch.randn()
標準正規分布(平均 = 0、標準偏差 = 1)
torch.eye()
単位行列
torch.empty()
メモリを確保するが初期化はしない

自前データの扱い

houses = torch.tensor([
    [2, 65, 15, 285],
    [3, 95, 8, 425],
    [4, 120, 25, 380],
    [3, 88, 42, 295],
    [5, 180, 3, 675],
    [2, 58, 50, 245]
], dtype=torch.float32)

数値以外(文字列、画像、メッシュなど)はまず数値へマッピングする必要があります。

データ型例の形状
画像
[28, 28]
(グレースケール)または
[3, 28, 28]
(RGB)
3Dメッシュ
[1000, 3]
(x,y,z座標を持つ頂点)

テンソルの数値演算

基本的な四則演算

x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])

print(x + y)        # 加算
print(x * y)        # 要素ごとの積
print(x @ y)        # ドット積

# 集約関数
print(x.sum())      # 全要素の合計
print(x.mean())     # 平均
print(x.max())      # 最大値

活性化関数

import torch.nn.functional as F

x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])

print(F.relu(x))        # ReLU
print(torch.sigmoid(x)) # Sigmoid
print(torch.tanh(x))    # Tanh

自動微分(Autograd)

AutogradはPyTorchの自動微分エンジンです。

簡単な例

x = torch.tensor(2.0, requires_grad=True)
f = x ** 2          # f(x) = x²
f.backward()        # ∂f/∂x を計算
print(x.grad)       # 4.0

より複雑な関数

x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)
z = torch.tensor(0.5, requires_grad=True)

f = torch.sin(x) * y**2 + torch.exp(z)
f.backward()

print(x.grad)  # ≈ 2.16
print(y.grad)  # ≈ 3.37
print(z.grad)  # ≈ 1.65

単純なニューラルネットワークの構築

インポートとデータ準備

import torch, torch.nn as nn, torch.nn.functional as F
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error
import matplotlib.pyplot as plt

# データ読み込み
data_raw = pd.read_csv('./london_houses_transformed.csv')

# 特徴量とターゲットを分離
x = data_raw.drop('price', axis=1)
y = data_raw['price']

# 学習/テスト分割(80/20)
X_train_raw, X_test_raw, Y_train_raw, Y_test_raw = train_test_split(
    x.values, y.values, test_size=0.2, random_state=15)

# 正規化
scaler_X = StandardScaler().fit(X_train_raw)
scaler_Y = StandardScaler().fit(Y_train_raw.reshape(-1, 1))

price_mean, price_std = scaler_Y.mean_[0], scaler_Y.scale_[0]

# テンソルへ変換
X_train = torch.FloatTensor(scaler_X.transform(X_train_raw))
X_test  = torch.FloatTensor(scaler_X.transform(X_test_raw))
Y_train = torch.FloatTensor(scaler_Y.transform(Y_train_raw.reshape(-1, 1)))
Y_test  = torch.FloatTensor(scaler_Y.transform(Y_test_raw.reshape(-1, 1)))

モデル定義

class Model(nn.Module):
    def __init__(self, in_features=87, h1=64, h2=32, output_features=1):
        super().__init__()
        self.fc1 = nn.Linear(in_features, h1)
        self.fc2 = nn.Linear(h1, h2)
        self.out = nn.Linear(h2, output_features)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        return self.out(x)

model = Model()

学習ループ

epochs = 100
learning_rate = 0.01
torch.manual_seed(15)

optimiser = torch.optim.Adam(model.parameters(), lr=learning_rate)
loss_func = nn.MSELoss()

losses = []

for i in range(epochs):
    optimiser.zero_grad()
    y_pred = model(X_train)
    loss   = loss_func(y_pred, Y_train)
    losses.append(loss.item())
    loss.backward()
    optimiser.step()

torch.save(model.state_dict(), 'model.pth')

損失の可視化

plt.figure(figsize=(10, 6))
plt.plot(losses, linewidth=2, color='#e74c3c')
plt.xlabel('Epoch', fontsize=12)
plt.ylabel('MSE Loss (正規化)', fontsize=12)
plt.title('学習経過:損失がゼロに近づく', fontsize=14, fontweight='bold')
plt.grid(alpha=0.3)
plt.ylim(bottom=0)
plt.tight_layout()
plt.show()

モデル評価

model.eval()
with torch.no_grad():
    predictions = model(X_test)

    # 正規化解除
    predictions_real = predictions * price_std + price_mean
    Y_test_real      = Y_test * price_std + price_mean

    mae  = mean_absolute_error(Y_test_real, predictions_real)
    mape = mean_absolute_percentage_error(Y_test_real, predictions_real) * 100

    pct_errors   = torch.abs((Y_test_real - predictions_real) / Y_test_real) * 100
    within_10    = (pct_errors <= 10).sum().item()
    within_20    = (pct_errors <= 20).sum().item()
    total        = len(Y_test_real)

print(f"\n全体の評価:")
print(f"  MAE:  £{mae:,.0f}")
print(f"  MAPE: {mape:.1f}%")
print(f"  10%以内: {within_10}/{total} ({within_10/total*100:.0f}%)")
print(f"  20%以内: {within_20}/{total} ({within_20/total*100:.0f}%)")

結果

全体の評価:
  MAE:  £329,798
  MAPE: 18.6%
  10%以内: 257/689 (37%)
  20%以内: 447/689 (65%)

結論

以下の一連のパイプラインを構築しました:

  1. データ前処理 – 読み込み、分割、正規化、テンソル変換
  2. モデル定義 – 単純な全結合ネットワーク
  3. 学習ループ – フォワードパス、損失計算、逆伝播、オプティマイザ更新
  4. 評価 – MAE、MAPE、パーセンテージ誤差指標

性能はモデルが学習していることを示す一方で、特徴量(特に位置情報)の質が精度の限界となっていることを示しています。今後はより豊富な特徴量やXGBoostなどのツリーベース手法を試すことで改善できる可能性があります。


もっと学びたい方はニュースレターへ登録してください!

同じ日のほかのニュース

一覧に戻る →

2026/02/17 3:41

14歳のマイルズ・ウーは、重量の万倍を支えられる折り紙パターンを折りました。

## Japanese Translation: --- ### Summary 14歳のミレス・ウーは、ニューヨーク市にあるハンター・カレッジ高校(Hunter College High School)の9年生であり、彼がミウラ折り紙パターンについて行った研究で2025年 Thermo Fisher Scientific Junior Innovators Challenge の賞金25,000ドルのトップ賞を受賞しました。ウーは、コピー用紙、薄い厚手紙(light cardstock)、重い厚手紙(heavy cardstock)の3種類の紙を使用し、家族のリビングルームに設置した臨時実験室で **54 の異なるバリエーション**(108 回の試行)をテストしました。各折り紙は 64 平方インチで、ガードレールが 5 インチ間隔で配置されていました。初期重量推定は約50ポンドでしたが、最も強いパターンは **200 ポンド**まで耐え、正確な測定には 50 ポンドのエクササイズウエイトを必要としました。この結果、デザインは自身の重さの **10,000 倍以上** を支えることができること(ニューヨーク市のタクシーで4,000頭以上のゾウを運ぶに相当)を示しています。 この研究は、ハリケーンや山火事などの自然災害時に堅固で費用対効果が高く、簡単に展開できる **配備可能な緊急シェルター** を開発することを目的としています。ウーは、1枚または複数枚のミウラ折り紙シート(長方形/テント状構造)でアーチ型シェルターをプロトタイプ化し、横方向圧縮や多方向力に対する耐性を検証する計画です。 この業績はサイエンス協会の社長マヤ・アジャメラ(Maya Ajmera)によって注目されました。彼女はウーが生涯の折り紙趣味を厳密な構造工学へと変革したこと、創造性、リーダーシップ、チームワークを称賛しました。また、プリンストン大学のエンジニアグラウィオ・H・パウリーノ(Glaucio H. Paulino)は、設計をスケールアップするには非線形強度スケーリング、ジョイント設計、不完全性、ボッキング、多方向荷重抵抗の課題に対処する必要があると指摘しました。 ミウラ折り紙は日本の天体物理学者・宮浦耶(Koryo Miura)によって発明され、宇宙機関(例:日本のスペースフライヤー・ユニットや宇宙船のソーラーパネル)で使用されています。最近では、望遠鏡や衛星に適用できるブルームパターンも開発されています。ウーは6年前から紙折りを探求し、1960年代以降に拡張された折り紙の工学・医療・数学・建築への応用を知ったことで趣味から STEM 研究へとシフトしました。 Thermo Fisher Scientific Junior Innovators Challenge は1999年からサイエンス協会が主催する中学生向けの主要な全国STEM競技です。

2026/02/17 6:15

研究:自己生成型エージェントスキルは役に立たない (Note: This translation preserves the original meaning and maintains a natural, polite tone in Japanese.)

## Japanese Translation: 現在の要約は主要な発見とほぼすべての定量的詳細を捉えていますが、キュレーションされたスキルで影響を受けたタスク数を正確に追加し、著者数を修正することでさらに簡潔にできます。以下は若干改訂したバージョンです: > **要約:** > SkillsBench は 11 ドメインにわたる 86 タスクで大規模言語モデル(LLM)を評価し、「スキル」(事前定義された手順のステップ)がパフォーマンスに与える影響を測定するベンチマークです。キュレーションされたスキルが追加されると、平均合格率は「スキルなし」時より 16.2 pp 上昇します。効果は大きく異なり、ソフトウェアエンジニアリングでは +4.5 pp、ヘルスケアでは +51.9 pp に達します。実際に 84 タスクのうち 16 件がキュレーションされたスキルでマイナスの差分を示し、自身生成したスキルは全体として有益ではなく、モデルが消費する手順知識を信頼して作成できないことを示しています。わずか 2〜3 のスキルモジュールだけで完全なドキュメントよりも優れた性能を発揮し、これらのスキルを備えた小型モデルはそれらを持たない大型モデルと同等に競合できます。このベンチマークは 7,308 の対話軌跡で 7 つのエージェント–モデル構成をテストします。著者は複数機関からなる 38 人の研究者チームで、2026 年 2 月 13 日に公開され(ファイルサイズ 1,366 KB)、今後は最も効果的なスキルを選択してより効率的かつドメイン特化型 AI エージェントを構築する研究が進められることが示唆されています。

2026/02/17 5:34

Suicide Linux(2009)

## Japanese Translation: **改善された要約** この記事は、入力ミスしたコマンドを自動的に `rm -rf /` に書き換えてシステムを削除する「Suicide Linux」と呼ばれる皮肉な Linux ディストリビューションについて説明しています。Suicide Linux は、OS を使い続けられる時間を測るゲームや実験として提示されており、すべてのデータが失われるまでどれだけ長く使用できるかを試すものです。記事はその開発経緯を追っています:2011‑12‑26 の Debian パッケージとデモ動画、2015 年に自動修正機能がオプションであり標準の Linux 動作ではないことを明確化した説明、2017 年の Docker イメージ(`tiagoad/suicide-linux`)にソースコードが含まれていること、そして 2020 年に著者が自らそのパッケージを作成していないと認めたことです。記事は将来の改良点として、冗長な警告メッセージやランダムな単一ファイル削除などを追加し、実験を教育用途に安全にする提案も示しています。総じて、Suicide Linux は主に好奇心と学習ツールであり、システムの堅牢性をテストしたい開発者や「タイプミスアラート」スクリプトを作成したい人には有用ですが、一般的な Linux ディストリビューションに影響を与える可能性は低いと結論付けられています。