【NumPy入門】ベクトルの大きさ(ノルム)を計算するnp.linalg.norm

こんにちは!インストラクターのフクロウです!

ニューラルネットワークの過学習対策でもおなじみのL1ノルム、L2ノルムを計算するnp.linalg.norm関数を紹介します!

使い方はとっても簡単!この記事で

  • ノルムって何?
  • np.linalg.normってどう使うの?
  • 機械学習ではどう使われるの?

の三点を押さえて、使いこなしちゃいましょう!

ノルムって何?

(簡単に言うと)原点などからある点までの距離(大きさ)ノルムといいます。

ノルムにはいくつか種類があって、代表的なものとしてはL0ノルム、L1ノルム、L2ノルムなどがあります。

L0ノルム

これは0以外の値を持つ次元の数のことです。

(ちゃんとした定義を知りたい方は以下の資料を見ましょう。)

L1ノルム

これは各次元の値の絶対値の和のことです。

「マンハッタン距離」という距離の考え方と同じ計算式です。

L2ノルム

各次元の値を2乗した和の平方根がL2ノルムです。

「ユークリッド距離(普通の距離のことです)」という距離の考え方と同じ計算式です。

L2ノルムは中学校でも習ったおなじみのものです。

下のグラフの矢印の長さを求めます。

import numpy as np
import matplotlib.pyplot as plt

plt.figure()

# 矢印(ベクトル)の始点
O = np.array([0,0])
# 矢印(ベクトル)の成分
X = np.array([4,3])

# 矢印(ベクトル)
plt.quiver(O[0],O[1],
           X[0],X[1], 
           angles='xy',scale_units='xy',scale=1)

# グラフ表示
plt.xlim([-5,5])
plt.ylim([-5,5])
plt.grid()
plt.draw()

np.linalg.normの使い方

np.linalg.normはノルムを計算する関数です。

引数に配列を渡せば他のNumPy関数同様に計算してくれます。

大事な引数であるordを中心にコードを見てみましょう。

ordはL0, L1, L2などの指定に使うパラメータです。

L0ノルム

Xの中で0でない値は2つなので……

>>> np.linalg.norm(X, ord=0)

2.0

L1ノルム

要素の絶対値の和は7なので……

>>> np.linalg.norm(X,ord=1)

7.0

>>> np.sum(np.abs(X))

7

L2ノルム

三平方の定理を思い出してください。

>>> np.linalg.norm(X, ord=2)

5.0

>>> np.sqrt(np.sum(np.abs(X**2)))

5.0

ノルムって何に使えるの?

ノルムの計算、特にL1ノルムやL2ノルムは、ニューラルネットワークの不要なパラメータを削ったり過学習を防ぐために使われています。

L1正則化、L2正則化などと呼ばれるものです。

結合重みのノルムを計算して、この値を損失関数にペナルティ項として追加することで利用します。

詳しく知りたい方は以下の記事がおすすめです。

まとめ

この記事では、NumPyでノルムを計算する関数「np.linalg.norm」を紹介しました。

機械学習の実装ではL1ノルムやL2ノルムが大活躍しますよ。

使い方も簡単なので、是非使ってみてください!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。