ニューラルネットワーク概略

ニューラルネットワークでは、各層の値は、重みが掛けられ、バイアスが足されてゆく。

そして、アウトプットされる値は(言い方が、へんだけれど)活性化関数によりバラツキが整えられる。

活性化関数により、線形変数が非線形変数に変換される。(chainer  Tutorialより)

出力層(この系の最後のアウトプット)には、恒等関数とソフトマックス関数が利用される。

一般的には、前者は回帰問題に、後者は分類問題に用いられる。

実際には、重みやバイアスを逐一設定していくのは、とても手間がかかる。

そこで損失関数を使い、重みやバイアスによる値を評価してゆく。

損失関数としては、数値微分、誤差逆伝播法(アウトプットの流れとは逆向きに、足し算と引き算で行ける)といった手法がある。

出力されたアウトプットされた値と、教師データの差の評価は、損失関数により得られる。2乗和誤差、交差エントロピー誤差などがある。

以上、取材ノートとして。
「ゼロから作るDeepLearning」(斉藤康毅 /オライリー・ジャパン)を、自分の解釈で要約。

.sshの削除&生成

公開鍵/秘密鍵は、ユニークな仕組みだよねぇ。

言われてみれば、そのとおりだとおもう、

とはいえ、いざ、鍵が収納されているディレクトリを削除し、また、あらたに作る際には、躊躇してしまう。

(やってみれば、そんなに、おおげさな事ではないんだけれど)

手順は以下のとおり。

rm -rf ~/.ssh //鍵が収納されているディレクトリを削除する。
ssh-keygen //秘密鍵、公開鍵が生成されたファイルを収納する、あらたなディレクトリが生成される。

はい。終わり〜

ls -laで、.sshの所在を確認。
.sshのディレクトリに移動し、ls -laのコマンドを打つと、
id_rsa //秘密鍵
id_rsa.pub //公開鍵
のファイルが確認できる。

さらにcatコマンドにて、生成された秘密鍵、公開鍵の実際を見ることが出来る。

GitとGitHubの困惑

とかく、Git、GitHubは、わかりにくい。

呪文のように、あるいは、「もう、そういうものだ」的に、
ただ決まったコマンドを打つことになる。

ただし、うまく行っているあいだは、それで、いいのだけれど、
うまく動作しなくなったとき、自主的に解決できなくなってしまう。

ネット上の、Terarail(テラテイル)や、はての「人力検索」に問う方法もある。とくに前者は、主対象がプログラマーで、プログラミングの質問/回答が多く寄せらている、

がしかし、やはり、質問の内容をある程ていど、理解していないと、
答える方にとって、なにを質問されているのか、わからない状況になってしまう。これはプログラミングに限らない。質問って、むつかしいものなんだぜ、

…って、まぁ、ハナシが、だいぶ、それて来てしまったね。

Git、GitHubについてであった。

おうおうにして、他のプラットフォームもそうだけれど、まず、どこまでがパソコン側の操作なのか、どこまでがサーバーやクラウド側の操作なのか、区別を認識せずに、やっていることが、ひとつの原因だとおもっているわけ。

整理してみよう。

(ローカルでの作業)
git init   //作業ファイルにgitを生成する
git add  //変更点を、ひとまずステージにあげておく.変更を、ここで、ひとまめできるので、まとめてgit commitできたりする.
git commit //変更点をgitに書き込む.

(ここからクラウド側の作業)
git rimote add //クラウド側にgitを生成する。git initのようなもの。
git push //ローカル側のgitを、クラウド側にpushする。

デフォルトでは、ローカル側のgit名はmaster、クラウド側はorigin masterとなっている。なのでpushするとき、git push origin masterとなる(オリジンマスターに押し出す)。このへんも、混乱する一因かと。

情報が解き放されるはずが…

インターネットは、プロトコル(TCP/IP)と言っても良い、とおもう。

なので、とうしょは、それ系の、言ってみれば、オタクどおしのコミュニティのようなものだった。

ちがう言い方をすれば、一般向けのアプリケーションがなかったわけネ。

グンと間口が広がったのは、ティム・バーナーズ・リーによるウェッブの発明による。

そして、そのときのウェッブは、まだステートレスだったんだ。

ここで言うステートレスとは、ユーザーがウェッブページをみて、次のページに移るとき、データは残らないという意味です。

ウェッブページは、ブラウザーにより、とても扱いやすくなった。

マーク・アンドリーセンは、ブラウザーにクッキーという機能をもたせ、次のページに移っても、データが保持されるようにした。

買い物をカートに入れて、次のページに移っても、カートの中身は保持されているイメージだね。

で、げんざいは、ユーザー側(ブラウザー/クッキー)より、だんぜん、サーバー側に情報が保持されているでしょう。

検索すればグーグルに、買い物をすればアマゾンに、知人とやり取りすればフェイスブックに、という具合に。

それに対して、ユーザーは2つの方法が取れる、とおもう。

ひとつは、大手テック企業のプライバシー条項に目を通してみること、

そして、もうひとつは、ブロックチェーンに期待すること、なんだ。

新しいiPhone

あたらしいiPhoneが発表された。

グーグルのスローガンは「AIファースト」だ。

マイクロソフトは「(AIにより仕事を)エンパワーする」である。

それに対し、アップルは、とくに旗印をあげていない。

ただし、アップルの発表会を見ていると、iPhoneでは、

被写体の撮影の際のアプリケーションとしてAIを利用する、そんな方針にみえる。

一方のグーグルは、アプローチが違うでしょう。

もちろんアップルのように、撮影時の被写体の調整にも使用しているけれど、

たとえば写真を認識させ、その画像が何かを知らせてくれたりもする。

アップルの発表会では、AIチップの他社製とのスペックの違いを強調していた。

グーグルのPixelとの比較など、これは違うでしょう。

iPhoneは、iphoneでの機械学習を前提にしているし、Googleはクラウド上のAIエンジンで、かなり処理をしていると、おもう。

スマホ単体で比較するのは、フェアとは言えないわけよ。

mesh grid

np.meshgridの働きをまとめておこう。

import numpy as np

x1=np.array([1,2,3])
x2=np.array([4,5,6])

X1,X2=np.meshgrid(x1,x2)

print(X1)
[[1,2,3]
 [1,2,3]
 [1,2,3]]

print(x2)
[[4,4,4]
 [5,5,5]
 [6,6,6]]

 

第一引数のリストが横に、一方、第二引数のリストが縦に配置される。リストの個数は、それぞれの値の数と対応しているようだ。

これを、使うことで、たとえばx1とx2すべてを足した値、あるいはすべてを掛けた値のリストを作ることができる。

def sum(X1,X2):
    return X1+X2

sum(X1,X2):
array([[5, 6, 7],
       [6, 7, 8],
       [7, 8, 9]])


def malti(X1,X2):
    return  X1*x2


array([[ 4,  8, 12],
       [ 5, 10, 15],
       [ 6, 12, 18]])

 

一昨日のブログで示した二乗和のグラフは、これを応用しているんだね。ほー。

 

管理者権限

数年前からLinux系を使うようになった。

Ubuntsu、そしてRaspbianとなる。

そのむかし、コンピュータはとても貴重なものだった、らしい。

たとえば、会社も大学も何台も買いそろえることが出来ず、1台のコンピュータを、みんなで使っていた、

がしかし、途中で、権利関係か何かで、それが出来なくなり、怒りのハッカーがフリー(無料)のUNIXを作ったんだ、たしか…(ちがうかも)

ケン・トンプソンは、 C言語の開発にも、たずさわったんじゃないかしらん。

UNIXは複数の人が使う仕様になっていて、Linuxもそれが受け継がれている、

がしかし、僕のばあい、ひとりで使っている。

なので「管理者権限」ということに、どうしても、うとくなっている。

コマンド
ls-la
で、ファイルの管理者権限が確認できる。

そのなかに「root」とあるけれど…

「rootって、なに?」 という感じだ。

調べてみました。

rootは「root権限」であり、「root権限」イコール、システムの管理者の権限、らしい。

この権限を借りたいときは「su」や「sudo」のコマンドを利用することになる。

なにげに、
sudo apt-get install
などと打っているいるけれど、じつは、これは管理者権限を借りて、パッケージをインストールしていたんですねぇ。

ただし、これ、じぶんひとりで、やっていると実感がわかない。

複数でやっていると、sudoを打って…管理者権限を得て…という感じが分かるかもしれないねぇ。

ちなみに、sudoは 、文字どおり、suをdoするもの。

たとえば、先に書いたsudo install apt-getのように、パッケージをインストール(do)するときのコマンドなんだわ。

2乗和のイメージ

1次関数で、すでに、ぼんやりしてしまうぜ、俺。

というとき、わりとグラフにしてみると、直感的にアッと、おもえたりするわけよ。

グラフにするアイデアは、デカルトか、あるいは同時代の人が考案したみたいな。

助かるねぇ。

といわけで、2乗和のグラフを描いてみようとおもう。

#2乗和の関数を書いてみる
def sum_of_squares(x1,x2):
    return x1**2 + x2**2  

#x1,x2に、-3から3までの0.1刻みの値を入れる。それぞれに6×10=60個の値が入る。
import numpy as np
x1= np.arange(-3,3,0.1)
x2= np.arange(-3,3,0.1) 

#meshgridを利用する。このへんが理解できていないけれど、ま、とりあえず。
X1,X2= np.meshgrid(x1,x2)

#作った2乗和の関数の引数に、X1,X2を入れる。
Y=sum_of_squares(X1,X2)

import matplotlib.pyplot as plt

#3次元を描くためのライブラリ。100%覚えられないみたいな〜
from mpl_toolkits.mplot3d import Axes3D

#このへんの書き方は
#https://qiita.com/TAIniko/items/4c5de524f4b1009fb05bを参照。

fig=plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X1, X2, Y)
ax.set_xlabel("X0")
ax.set_ylabel("X1")
ax.set_zlabel("Y")
plt.show()

 




おおー
うつくしい〜

2次曲線の接線

pythonで、2次曲線の接線を描いてみようか。

#微分係数の関数
#h=10e-10は任意。とりあえず、このぐらいにしてみようと〜
def diff(f,x):
    h=10e-10
    return ( f(x+h)-f(x))/h

#任意の関数を作る
def func(x):
    return x**2

#任意の関数のグラフに、x=5の点で接線を引く
def tangent_line(x):
    a=5
    d=diff(func,a)
    b=func(a)
    return d*(x-a)+b

import numpy as np

x=np.arange(0,10,0.1)

y1=func(x)

y2= tangent_line(x)

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'IPAPGothic'  
#日本語フォントを使えるようにする
plt.plot(x,y1,label="y=x2")
plt.plot(x,y2,label='接線')
plt.legend()
plt.grid()
plt.show

 

仮想通貨

フェイスブックのリブラ(libra)、そして今秋にもウワサされている中国政府による仮想通貨発行により、政府間でも、仮想通貨(暗号資産)の取り扱いについて、盛んに議論されているようだ。

ときどき仮想通貨が話題になる。セキュリティが脆弱だという人もいる。

けれど、これは誤解だ。

その中核となる技術ブロックチェーンは、むしろサーバーを中心にした既存のシステムよりセキュアである、というか、そもそも、そういうふうに設計されている。

コインチェックなどの仮想通貨流出事件は、仮想通貨の脆弱性ではなく、サーバーに預けられていた個人の秘密鍵が盗まれたんだわ。