# カーネルとは？機械学習のカーネル法・カーネルトリックからCNN・Linuxまで分かりやすく解説！

> カーネルとは「核・中心」を意味する言葉で、機械学習ではデータを別の空間に変換して扱いやすくする関数を指します。本記事では、カーネルの役割、SVMのカーネルトリックの仕組み、CNNの畳み込みカーネル、OSのLinuxカーネルまで、図とPythonで分かりやすく解説します！

- URL: https://toukei-lab.com/kernel
- 公開: 2026.10.28
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、「カーネル」という言葉について分かりやすく解説していきます！機械学習のカーネル法やカーネルトリックを中心に、CNNの畳み込みカーネル、Linuxカーネルまで、まとめて整理していきましょう！
:::

こんにちは！ウマたんです！

AIの勉強をしていると、「カーネル法」とか「SVMのカーネルトリック」とか、あるいは「Linuxカーネル」なんて言葉をよく聞きますよね。

でも、「カーネルって何者？」と聞かれると、意外と説明しづらいものです。

しかも、分野によって指しているものが少しずつちがうので、混乱しやすい言葉なんです。

今回は、この「**カーネル**」という言葉の本質と、機械学習やコンピューターの世界でどう使われているのかを、まとめて見ていきます。

:::talk{who="man" side="left"}
SVMの本を読んでたら「カーネルトリック」が出てきて、急に分からなくなった…
:::

:::talk{who="woman"}
CNNの「カーネル」とSVMの「カーネル」って、同じものなの？
:::

本記事では、次の5つを順番に解説していきます。

:::point
**・カーネルとは？**\
**・機械学習のカーネルの役割**\
**・SVMとカーネルトリック**\
**・ディープラーニングの中のカーネル（CNNの畳み込みカーネル）**\
**・OSのカーネル（Linuxカーネル）**
:::

以下のYouTube動画でも解説していますので、あわせてチェックしてみてください！

::youtube{#oB_GkUCgzCY}

## カーネルとは？

まずは、そもそも「カーネル」とは何かから見ていきましょう。

### 英語で「核」や「中心」という意味

カーネル（kernel）という言葉は、英語で「**核**」や「**中心**」を意味します。

もともとは、果物の種の中にある、やわらかい中身のことを指す言葉です。

そこから、<mark>システムやアルゴリズムの「中心部分」</mark>というイメージで使われるようになりました。

### 分野によって意味が少し変わる

ただし、カーネルは分野によって、指しているものが少しずつ変わってきます。

| 分野 | カーネルが指すもの |
|---|---|
| 機械学習・数学 | データを別の空間に変換して扱いやすくする関数（データどうしの似ている度合いを測る関数） |
| ディープラーニング（CNN） | 画像から特徴を取り出す、小さな数字の表（フィルター） |
| コンピューター（OS） | OSの中核となる部分（Linuxカーネルなど） |

コンピューターの世界では、LinuxカーネルなどOSの中核部分を表します。

一方で、機械学習や数学の世界では、データを別の空間に変換する関数を表します。

今回は、この<mark>機械学習におけるカーネル</mark>を中心に話していきます！

## 機械学習のカーネルの役割

機械学習のカーネルの役割を一言で言うと、<mark>データを変換して、線形（直線や平面）で扱えるようにすること</mark>です。

### 直線では分けられないデータ

たとえば、あるデータが、円の内側と外側に分かれて散らばっているとします。

この状態では、内側のグループと外側のグループを、1本の直線で分けることはできません。

どこに直線を引いても、どちらかのグループを真っ二つにしてしまいますよね。

### 次元を1つ足すと、平面で分けられる

ところが、データを高い次元の空間に移してあげると、話が変わります。

たとえば、元の2つの値 $x_1, x_2$ に加えて、3つ目の値として「原点からの距離の2乗」$x_1^2 + x_2^2$ を「高さ」として足してみます。

![左：元の2次元では直線で分けられない。右：高さ（x₁²＋x₂²）を足して3次元にすると、内側のグループは低く、外側のグループは高くなり、平面で分けられる](/wp-content/uploads/2026/10/kernel-lift.jpg)

すると、円の内側にあったデータは低いところに、外側にあったデータは高いところに集まります。

こうなれば、1枚の平らな板（平面）を間に差し込むだけで、きれいに分けられるんです！

もともと2次元だと分離できないように見えたデータが、1次元追加して3次元にすることで、平面で分離できるようになったわけですね。

<mark>高い次元の空間に変換して、扱いやすくする魔法。これこそがカーネルの本質</mark>なんです！

### カーネル関数は「似ている度合い」を測る

もう少しだけ正確に言うと、機械学習でいう「**カーネル関数**」は、2つのデータ $x$ と $x'$ を受け取って、<mark>変換した先の空間での「似ている度合い」（内積）</mark>を返す関数です。

$$
k(x, x') = \phi(x) \cdot \phi(x')
$$

ここで $\phi$（ファイ）は、データを高い次元の空間に移す変換です。

よく使われるカーネル関数には、次のようなものがあります。

| カーネル | 式 | 特徴 |
|---|---|---|
| 線形カーネル | $x \cdot x'$ | 変換しない。直線（平面）で分ける |
| 多項式カーネル | $(x \cdot x' + c)^d$ | 特徴量どうしのかけ算の組み合わせまで考える |
| RBFカーネル（ガウスカーネル） | $\exp(-\gamma \lVert x - x' \rVert^2)$ | 近いデータほど似ているとみなす。もっともよく使われる |

特にRBFカーネルは、どんな形の境界線にも柔軟に対応しやすく、まず最初に試されることが多いカーネルです。

## SVMとカーネルトリック

では、このカーネルを使った具体例を見ていきましょう。

カーネルの代表的な使い方が、「**サポートベクターマシン（SVM）**」です。

### SVMは「一番広い境界線」を探すモデル

SVMは、データを2つのグループに分けるための、最も広い境界線を見つけるモデルです。

境界線と、そのすぐ近くにあるデータとの間の幅（マージン）ができるだけ広くなるように、線を引くんです。

ただ、SVMはもともと「直線（平面）で分ける」モデルなので、データが線形に分離できないときに困ってしまいます。

SVMの仕組みは、以下の記事で詳しく解説しています。

<https://toukei-lab.com/svm>

### 高い次元に移さなくても、同じ計算ができる

そこで登場するのが「**カーネルトリック**」です。

先ほどの例では、データに「高さ」を足して、実際に3次元に移していました。

でも、データの次元がもっと多かったり、もっと複雑な変換が必要だったりすると、実際に変換するのは大変ですよね。

カーネルトリックを使うと、<mark>実際に高い次元に変換しなくても、カーネル関数というちょっと特殊な計算だけで、高い次元の空間での「似ている度合い」や距離を求めることができる</mark>んです。

つまり、高い次元の空間を、こっそり（暗黙的に）扱えるわけですね。

### かんたんな例で確かめてみよう

たとえば、2次元のデータ $x = (x_1, x_2)$ と $x' = (x_1', x_2')$ に、次のようなカーネルを使うとします。

$$
k(x, x') = (x \cdot x')^2 = (x_1 x_1' + x_2 x_2')^2
$$

これを展開すると、次のようになります。

$$
(x_1 x_1' + x_2 x_2')^2 = x_1^2 x_1'^2 + 2 x_1 x_2 x_1' x_2' + x_2^2 x_2'^2
$$

実はこれは、データを $\phi(x) = (x_1^2,\ \sqrt{2} x_1 x_2,\ x_2^2)$ という3次元に変換してから、内積をとったものと同じなんです。

| やり方 | 計算の手順 |
|---|---|
| まじめに変換する | 2つのデータをそれぞれ3次元に変換して、内積をとる |
| カーネルトリック | 元の2次元のまま内積をとって、2乗するだけ |

どちらも答えは同じなのに、カーネルトリックなら、3次元の世界に一度も行かずに済みます。

次元が何百、何千と増えても、計算は元の次元のままで済むのが、カーネルトリックのすごいところです。

ちなみにRBFカーネルの場合、変換先の空間を書き出すと、なんと無限次元になります。それでも、カーネル関数を使えば、ふつうに計算できてしまうんです！

### Pythonで効果を確かめてみよう

実際に、円の内側と外側に分かれたデータで、SVMのカーネルを変えて試してみましょう。

```python
import numpy as np
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

# 内側と外側の2つの円に分かれたデータ
X, y = make_circles(n_samples=300, factor=0.4, noise=0.08, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# ① 線形カーネル（直線で分ける）
linear = SVC(kernel="linear").fit(X_train, y_train)
print("線形カーネル：", linear.score(X_test, y_test))

# ② 自分で「高さ」の特徴量を足して3次元にしてから、直線（平面）で分ける
def add_height(X):
    return np.c_[X, (X ** 2).sum(axis=1)]  # x1, x2, x1²+x2²

lifted = SVC(kernel="linear").fit(add_height(X_train), y_train)
print("3次元にしてから線形：", lifted.score(add_height(X_test), y_test))

# ③ RBFカーネル（カーネルトリックにおまかせ）
rbf = SVC(kernel="rbf").fit(X_train, y_train)
print("RBFカーネル：", rbf.score(X_test, y_test))
```

```text
線形カーネル： 0.4111111111111111
3次元にしてから線形： 1.0
RBFカーネル： 1.0
```

線形カーネルの正解率は約41%。2つのグループを、ほとんど見分けられていません。

一方、自分で「高さ」を足して3次元にした場合と、RBFカーネルを使った場合は、どちらも正解率100%になりました！

![線形カーネルでは境界線を引けず、ほぼ全部を同じグループと予測してしまう。RBFカーネルなら、円の形の境界線で分けられる](/wp-content/uploads/2026/10/kernel-svm.jpg)

②では「どんな変換をすればいいか」を人が考える必要がありました。

<mark>RBFカーネルなら、変換を自分で考えなくても、データに合わせて曲がった境界線を引いてくれる</mark>んです。

:::warn
RBFカーネルの `gamma` という設定を大きくしすぎると、境界線が細かく曲がりすぎて、手元のデータに合わせすぎる「過学習」が起きやすくなります。`C`（はみ出しをどれだけ許さないか）とあわせて、交差検証などで調整しましょう。
:::

<https://toukei-lab.com/over-fitting>

### カーネル法はSVMだけじゃない

カーネルを使って、線形の手法を曲がった関係にも使えるようにする方法をまとめて「**カーネル法**」と呼びます。

SVMのほかにも、次のような手法があります。

| 手法 | カーネルを使って何ができる？ |
|---|---|
| サポートベクターマシン（SVM） | 曲がった境界線で分類できる |
| カーネル主成分分析 | 曲がった構造を持つデータの次元削減ができる |
| カーネルリッジ回帰 | 曲線的な関係を回帰で予測できる |
| ガウス過程回帰 | 予測とあわせて、予測の不確かさも出せる |

最近は、ディープラーニングの広がりとともに、カーネルという言葉を聞く機会が少しずつ減ってきているかもしれません。

でも実は、ディープラーニングの内部でも、カーネル的な考え方は生きているんです。

## ディープラーニングの中のカーネル（CNNの畳み込みカーネル）

その1つが、画像認識でおなじみの「**畳み込みニューラルネットワーク（CNN）**」で使われる「**畳み込みカーネル**」です。

### 画像の一部にフィルターをかけて特徴を取り出す

CNNでは、画像の一部に「カーネル（フィルター）」をかけて、特徴を取り出します。

この場合のカーネルは、数学的な変換というよりも、<mark>入力データから特徴を取り出すための、小さな数字の表（行列）</mark>という意味で使われています。

たとえば、次のような3×3のカーネルを考えてみましょう。

$$
\begin{pmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{pmatrix}
$$

これを画像の上で少しずつずらしながら、重なった部分のピクセルとかけ算して足し合わせていきます。

すると、左が暗くて右が明るい場所、つまり「縦の線（エッジ）」があるところで、大きな値が出てくるんです。

CNNでは、このようなカーネルの数字を人が決めるのではなく、学習によって自動で見つけていきます。

| | SVMのカーネル | CNNの畳み込みカーネル |
|---|---|---|
| 正体 | 2つのデータの似ている度合いを測る関数 | 画像の一部にかける小さな数字の表（フィルター） |
| 役割 | データを高い次元に移して、分けやすくする | 画像から線や模様などの特徴を取り出す |
| どうやって決める？ | 使うカーネルを人が選ぶ（RBFなど） | 学習で自動的に決まる |

見た目はかなりちがいますが、<mark>データを変換して、本質を浮かび上がらせる装置</mark>という点は共通しているんです！

CNNの仕組みについては、以下の記事で解説しています。

<https://toukei-lab.com/cnn>

## OSのカーネル（Linuxカーネル）

ちなみに、冒頭でも述べたとおり、カーネルという言葉は、AIだけでなくコンピューターの世界でも使われます。

### OSの心臓部

たとえば「**Linuxカーネル**」は、OS（オペレーティングシステム）の心臓部、中核部分です。

カーネルは、ハードウェア（CPUやメモリなど）と、僕たちが使うソフトウェア（アプリ）をつなぐ部分で、次のような仕事をしています。

:::box{title="OSのカーネルの仕事"}
**・どのアプリにCPUを使わせるかを決める**\
**・メモリを、それぞれのアプリに割り当てる**\
**・ファイルの読み書きや、キーボード・画面などの機器とのやりとりをまとめる**
:::

つまり、中心で全体を動かす仕組み、というわけです。

これも、機械学習のカーネルと同じように、全体の中心にあって、いろいろなものをつなぐ「核」となる部分。名前の由来も、まさに「核」なんですね。

### Jupyterの「カーネル」も同じ仲間

データサイエンスを学んでいると、Jupyter Notebookで「カーネルを再起動」というボタンを見かけることもありますよね。

この「カーネル」は、ノートブックに書いたPythonのコードを、裏側で実際に実行しているプログラムのことです。

これも、ノートブックの「中心」で計算を担う部分なので、カーネルと呼ばれているんです。

| よく聞く言葉 | 何のカーネル？ |
|---|---|
| カーネル法・カーネルトリック・RBFカーネル | 機械学習（データの似ている度合いを測る関数） |
| 畳み込みカーネル・カーネルサイズ | CNN（画像にかけるフィルター） |
| Linuxカーネル | OSの中核 |
| Jupyterのカーネル | ノートブックのコードを実行するプログラム |

これで、どの場面で「カーネル」という言葉が出てきても、大丈夫だと思います！

## カーネルのまとめ

最後に、今回のポイントをおさらいしましょう！

:::point
**・カーネルは「核・中心」という意味で、分野によって指すものが少しずつ変わる**\
**・機械学習では、データを高い次元の空間に変換して、線形で扱えるようにする関数のこと**\
**・カーネルトリックを使えば、実際に変換しなくても高い次元での計算ができ、非線形なデータも線形的に扱える**\
**・CNNのフィルターも、広い意味でのカーネル（データを変換して特徴を取り出す）**\
**・OSのカーネルも、中心で全体を制御する「核」という意味を持つ**
:::

:::talk{who="umatan"}
要は、カーネルとは「データを変換して、本質を浮かび上がらせる核」なんです！どの分野のカーネルなのかを意識すれば、もう混乱しなくて大丈夫です！
:::

機械学習やディープラーニングを体系的に学びたいのであれば、当メディアが運営するスクール「**[スタアカ](https://toukei-lab.com/achademy/)**」がオススメです！

:::box
**[業界最安級のAIデータサイエンス特化スクール「スタアカ」](https://toukei-lab.com/achademy/)**
:::