情報学部大学生のダラダラ日記

β日記

機械学習や日記っぽいものを書きます

D次元線形回帰モデルを平均二乗誤差を用いて解く

※自分のはてなブログの編集都合上、行列表現がTexで表現できないため画像を挿入します。すみません。※

導入

線形回帰モデルとは

例えば直線モデルについて考えてみます。以下の図を見てください。

 

f:id:Parco1021:20200203134035p:plain

引用元:線形単回帰分析の仕組みをわかりやすく解説! | 全人類がわかる統計学

 

散らばっている点を"それっぽい"直線にしています。直線の式であるので{\displaystyle y(x)=w_0x_o+w_1 }といった形になっています。この{\displaystyle w_1およびw_0 }を求めることが「線形回帰モデルを解く」ということです。

 

本記事の目的

では、本記事の目的を明確にします。先に紹介した直線モデルは1次元モデルであり、それぞれ{\displaystyle w_0,w_1 }を求めることは難しくないです。しかしこれが2次元、3次元あるいはより高次元となった場合にも解くことは可能でしょうか?逐一解いてみても良いと思いますが本記事では高次元である{\displaystyle D }次元を想定します。

今回解く対象の{\displaystyle D }次元線形回帰モデルを示します。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1}+w_D }

{\displaystyle w_D }は切片を表します。今回は切片を省略し、以下の式を対象とします。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1} }

対象の式をより簡略化して書きたいと思います。行列表記を用いると

f:id:Parco1021:20200203155302p:plain

この{\displaystyle \boldsymbol{w} }が今回着目する文字です。所謂"重み"に似たやつです。

 

では早速解いてみましょう。今回、平均二乗誤差{\displaystyle J }で解きます。

f:id:Parco1021:20200203161319p:plain

ここで目的を明確にしておきます。目的は{\displaystyle y(\boldsymbol{x}) }を誤差の少ない関数とすることです。具体的には損失関数{\displaystyle J }を最小とする最適な{\displaystyle \boldsymbol{w} }を見つけることです。最小とする、つまりみんな大好き微分をします。

行列の計算に慣れていない方はここから紙とペンで実際に解きながら読むことをおすすめします。

 

解く

では早速{\displaystyle w_i }微分しましょう。

f:id:Parco1021:20200203180553p:plain

{\displaystyle w_i }微分すると{\displaystyle x_{n,i} }となることに注意すると

f:id:Parco1021:20200203180052p:plain

となります。注意ですが{\displaystyle x_{n,i} }のnはデータ数、iは(0~D-1)をとります。

{\displaystyle Jを最小にするwは、全てのw_iに対して傾きが0すなわち偏微分したら0となります。このwを求めます。 }

f:id:Parco1021:20200203181517p:plain

このまま{\displaystyle \boldsymbol{w} }について解いてしまいたいですが{\displaystyle x_{n,i} }が邪魔ですね。この方程式は全ての{\displaystyle i }において成り立つため、

f:id:Parco1021:20200203182027p:plain

 となります。ここからさらにわかりやすくするためにベクトル表現でまとめると、

f:id:Parco1021:20200203182555p:plain

簡略化すると、

f:id:Parco1021:20200203183045p:plain

分配法則を用いて、

f:id:Parco1021:20200203183346p:plain

f:id:Parco1021:20200203184353p:plain

このままではΣが邪魔で解きにくいですね。行列表現を用いてΣを消すように試みましょう。

f:id:Parco1021:20200204121601p:plain

f:id:Parco1021:20200204122042p:plain

新しく{\displaystyle \boldsymbol{X} }を導入することでΣを無くすことができました。

では、同様にして第2項も簡略化しましょう。

f:id:Parco1021:20200204123603p:plain

Σを消すことができたので元の方程式を置き換えてみます。

f:id:Parco1021:20200204124749p:plain

あとはこれを{\displaystyle \boldsymbol{w} }について解きます。まずは両辺転置を取ります。

f:id:Parco1021:20200204170848p:plain

これをガンガン解いていきます。

f:id:Parco1021:20200204172327p:plain

これがD次元線形回帰モデルの解です。この式を用いるとxが何次元であっても、すなわちDが何であっても最適な{\displaystyle \boldsymbol{w} }が得られます。お疲れさまでした。

切片を無視していましたね。あと少しです。

切片がある時

では、切片がある時を考えましょう。切片がある時ってどういう時でしょう?初めに示した式を再掲します。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1}+w_D }

これを以下のように見ます。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1}+w_Dx_D }

この{\displaystyle w_Dが切片ですね。このw_Dを常に出力させたいのでx_Dを常に1とすれば良いのです。このようにD+1次元目のxを常に1とすることで切片を実現させることが可能です。 }つまりD次元線形回帰モデルの解は変えなくて良いです。

 

さいごに 

行列の諸々を忘れていて理解に少し時間がかかってしまいました。しかし1つ1つ紐解いていくと徐々に理解ができて楽しかったです。

 

まとめ

D次元線形回帰モデル

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1} }

f:id:Parco1021:20200203155302p:plain

の解は

f:id:Parco1021:20200204175037p:plain

但し、

f:id:Parco1021:20200204175133p:plain

 

参考文献

最小二乗法の解の導出 - 機械学習に詳しくなりたいブログ

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

 

 

 

誤差逆伝播法についてできるだけ丁寧に初心者がまとめる

導入

はじめに

勾配法において、損失関数を重みにおいて偏微分しそれを用いて重みを更新します。その手法の一種として以前に数値微分法という微分の定義に基づき、近似を用いることで勾配を求める手法をまとめました。今回は勾配を求める手法の1つとして誤差逆伝播法についてできるだけ丁寧にまとめたいと思います。僕自身その道について未だ初心者であるので同じような方の助けになれば幸いです。

parco1021.hatenablog.com

 

おねがい

本記事は勉強中の筆者が書いたものです。ゆえに少し解釈違いがあったり、文字が違っていたりするかもしれません。そういった場合にはコメントまたは下の問い合わせフォームから教えていただけると幸いです。

また、誤差逆伝播法を学ぶにあたり文章を読むだけでなく手元に紙とペンを用意して数式を書きながら読んでいただければ理解が捗ると思います。

誤差逆伝播法って聞くと…??

僕は未だ自分でモデルを組む等したことがありません。なので誤差逆伝播法についての認識は"勾配を求めるいい感じの方法"ぐらいでしかないです。その認識は実際に使ってみないと変わらないと思うので今のところはこれで良しとします。

大学の講義や教科書でのBackpropの説明はほとんど,「教師あり学習の文脈で多層パーセプトロンを識別器あるいは関数近似器として訓練する」という文脈でなされます.そのため,初学者はBackpropは教師あり学習のためのアルゴリズムであると誤解してしまうケースが多々あるのではないかと思います.しかし後で説明する通り,Backpropは単に損失関数の微分を効率的に計算する手法の1つであって教師あり学習とか教師なし学習とかは関係ありません

引用元:https://qiita.com/Ugo-Nama/items/04814a13c9ea84978a4c#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB

だそうです。僕は講義で習っておらず、現場でも使っていないのでその誤認はしていないので気を付けます。

ニューラルネットモデル

今回扱うニューラルネットモデルを以下に示します。

f:id:Parco1021:20200112181056p:plain

 今回は、簡略化のために中間層を1層とします。それぞれの変数の定義をします。

  • {\displaystyle x }…入力
  • {\displaystyle v,w }…重み
  • {\displaystyle h(),g() }…活性化関数
  • {\displaystyle b_j=\sum_{i=0}^{D} w_{ji}x_i }

→前の層からの出力(x)に重み(w)を掛けたものを全ての矢印において行っている

  • {\displaystyle z_j=h(b_j) }

→先ほど求めたbを活性化関数に引数として渡す。これにより求めたzが次の層へ渡される

  • {\displaystyle a_k=\sum_{j=0}^{M} v_{kj}z_j }
  • {\displaystyle y_k=g(a_k) }
  • {\displaystyle t_k }…教師データ

{\displaystyle δ }については後述します。

 

誤差逆伝播

では、誤差逆伝播法についてやっていきましょう。誤差逆伝播は簡単に言うと、出力層の重み{\displaystyle v }を更新してから中間層の重み{\displaystyle w }を更新するように、入力層→出力層ではなく、出力層→入力層へと流れていく様子からこの名前が付けられました。バックプロパケーション誤差逆伝搬法とも呼ばれます。

最終的にバックプロップによって最小化したい損失関数は以下のようになります。

{\displaystyle E(v,w)=\frac{1}{N}\sum_{n=0}^{N-1} E_n(v,w) }

この式の意味するところは損失関数を学習に使うデータ数{\displaystyle N }だけ足して平均したものが目的となる関数であるということです。

この関数を最小化するために勾配を求めます。つまり各データ{\displaystyle n }に対する勾配{\displaystyle \frac{∂E_n}{∂w} }を得なければなりません。求めて平均をとることで{\displaystyle \frac{∂E}{∂w} }が得られます。当然、{\displaystyle wだけでなく、v }における勾配も求める必要があります。

{\displaystyle \frac{∂E}{∂v} }を求める

連鎖律を用いて{\displaystyle \frac{∂E}{∂v}を求めます。 }

{\displaystyle \frac{∂E}{∂v}=\frac{∂E}{∂a}\frac{∂a}{∂v} }

となるのでそれぞれ分解します。繰り返しになりますが、{\displaystyle v }{\displaystyle jk }間の重みであり、{\displaystyle aはj層 }からの入力総和です。

まず、

{\displaystyle \frac{∂a}{∂v}=\frac{∂}{∂v_kj}(\sum_{j} v_{kj}z_j)=\frac{∂}{∂v_kj}( v_{k0}z_0+v_{k1}z_1+…v_{kj}z_j) }=z_jとなります。

次に、

{\displaystyle δ^{(2)}_k= \frac{∂E}{∂a} }とすると

{\displaystyle \frac{∂E}{∂v_kj}=δ^{(2)}_kz_j}となり簡単な式になりました!

f:id:Parco1021:20200130171048p:plain>ちょっと待ちなさい!{\displaystyle δ^{(2)}_k}っていったいなんなのよ!

ごめんなさいお母さん!!

{\displaystyle δ^{(2)}_k= \frac{∂E}{∂a}=\frac{∂E}{∂y}\frac{∂y}{∂a}=\frac{∂E}{∂y}g'(a) }

{\displaystyle \frac{∂y}{∂a} }{\displaystyle y=g(a) }となっているので当然ですね。例えば損失関数を二乗誤差とし、係数など諸々を無視する{\displaystyle \frac{∂E}{∂y}は大体y-t }となります。{\displaystyle yは出力であり、tは教師データです。}ゆえに概要としては結合先で生じた誤差に関する変数といった感じです。

つまり、{\displaystyle \frac{∂E}{∂v_kj}は、}結合元のニューロンの出力{\displaystyle z_j}と結合先での誤差{\displaystyle δ^{(2)}_k}を掛けたものであることがわかります。

重みの更新規則は

{\displaystyle v^{r+1}_{kj}=v^r_{kj}-α\frac{∂E}{∂v_{kj}}=v^r_{kj}-αδ^{(2)}_kz_j}となります。{\displaystyle αは定数です。}

以上で重み{\displaystyle v}については終わりです。次は中間層周りの重み{\displaystyle w}についてです。

 

{\displaystyle \frac{∂E}{∂w} }を求める

では{\displaystyle \frac{∂E}{∂w}}を求めていきましょう。数式が一見複雑そうに見えますが、内容としてはこれまでと同様レベルです。一緒に頑張りましょう。

{\displaystyle \frac{∂E}{∂w}=\frac{∂E}{∂b}\frac{∂b}{∂w} }となります。

ここで先ほどと同様に結合先への総和{\displaystyle b}があるので

{\displaystyle \frac{∂E}{∂b}=δ^{(1)}_j}とします。

{\displaystyle \frac{∂b}{∂w}=\frac{∂}{∂w_ji}(\sum_{i} w_{ji}x_i)=\frac{∂}{∂w_ji}( w_{j0}x_0+w_{j1}x_1+…w_{ji}x_i) =x_i}

よって

{\displaystyle \frac{∂E}{∂w}=δ^{(1)}_jx_i }となり、先ほど同様簡単な形になりました!

f:id:Parco1021:20200130171048p:plain

 

…はい。例のごとく{\displaystyle δ^{(1)}_j}が何を指すのか調査しましょう。k層があるのでΣを用います。

{\displaystyle δ^{(1)}_j=\frac{∂E}{∂b}=\sum_{k}\frac{∂E}{∂y_k}\frac{∂y_k}{∂a_k}\frac{∂a_k}{∂z_j}\frac{∂z_j}{∂b_j}}

{\displaystyle \frac{∂E}{∂y}\frac{∂y}{∂a}=δ^{(2)}_k }であり、{\displaystyle \frac{∂a}{∂z}=v_{kj} }であり、さらに{\displaystyle \frac{∂z}{∂b}= h'(x)}となります。

これらを用いると{\displaystyle δ^{(1)}_j }

{\displaystyle δ^{(1)}_j=h'(b_j)\sum_{k}v_{kj}δ^{(2)}_k }となります。

この式と以下の図に着目してみてください。本来のNNは入力層→出力層(左から右)へと処理が為されるのに対し、中間層の{\displaystyle δ^{(1)}_j}を求めるために出力層から{\displaystyle δ^{(2)}_k}と中間層~出力層間の重み{\displaystyle v}を掛け合わせたものを逆方向へ伝達させていることがわかります。

{\displaystyle δ^{(2)}_k}は先ほども述べた通り出力層の誤差です。誤差を逆方向へ伝播させていることから誤差逆伝播法と言います(と思います)。

 

f:id:Parco1021:20200201203215p:plain

{\displaystyle \frac{∂E}{∂w}が求まったので重みwの }更新規則を書きます。
{\displaystyle w^{r+1}_{ji}=w^r_{ji}-α\frac{∂E}{∂w_{ji}}=w^r_{ji}-αδ^{(1)}_jx_i}

 

ここまで、誤差逆伝播法について数式を交えつつ解説してきました。次はより抽象的に図を主としてイメージを掴みます。

 

誤差逆伝播法のまとめ

①NNにxを入力し、b,z,a,さらに出力yを得て全て保持しておく

入力し出力を得るのでここは普通に順伝播(左から右)

f:id:Parco1021:20200201210825p:plain

 

 

②教師データtと出力yから出力層の誤差δを計算する。そして逆方向へ伝播し、重みvと乗算しΣ計算することで中間層の誤差を計算する

f:id:Parco1021:20200201212023p:plain

 

③δを用いて重みを更新する 

f:id:Parco1021:20200201213547p:plain

 

さいごに

いかがでしたでしょうか。数式は多かったと思いますが1つ1つ丁寧に追っていけば大学1年生レベルのものであることがわかると思います。誤差逆伝播法を使うと何がメリットで何がデメリットなのかわからないので今後調べていきたいと思います。例えば誤差逆伝播法は"人間っぽい"考え方ではないから別の手法を考えていると研究室の先輩が輪講で言ってたような言ってなかったような…みたいな。

 

参考文献

qiita.com

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

"RPG感覚でプログラミングが学べる"コードクロニクルで遊んでみた

はじめに

"RPG感覚でプログラミングが学べる"というコンセプトのコードクロニクルで少し遊んでみました。遊んでみた感想を書こうと思います。

 

ゲームの紹介

基本的な流れはRubyPHPPythonのいずれかを選択して↓のように簡単なコードを書いてクエストをクリアする、という感じです。言語は随時追加されるそうです。

f:id:Parco1021:20200128123906p:plain

そして回答する時間を短くするとプラスでボーナスがもらえます。4回間違えると終了です。

 

また、ガチャ要素もありおそらくここに課金要素があります。

f:id:Parco1021:20200128124224p:plain

2回だけ引いたらなんかレア度が高そうなキャラしか出ませんでした。確率はわからないです。うれし。

このキャラによって特徴があり、先に述べたボーナスの貰える時間が増えるなどなどです。

 

コードクロニクルの良い点

おそらく対象が「これからプログラミングを学びたい人」であるので最初の方はとても簡単にできています。さらに、8割ほど完成している雛形が既に書かれているので穴埋め形式で解くだけです。その穴埋めも例えば"a"を出力させる問題である時、print("")まで書いてある問題と"a"のみ書いてある問題があり、多方面から同様の問題を解くことができるので上手くインプットできると思います。

また、解説動画も用意されているのでわからない問題があったり、復習にも使うことができます。

総合としてコンセプトである"RPG感覚でプログラミングが学べる"を満たしていると思いました。

 

少し気になる点

逆に少し気になる点を挙げます。

まずは対象がこれからプログラミングを学ぶ人であるのでしょうがないかもしれませんが何度も全く同じ問題が出され、退屈に感じてしまったことです。丁寧であることに反対ではありませんが、やはり全く同じ問題というのは刺激がなく、疲れてしまいます。

 

2つ目はこれもしょうがないと思うのですが、

例えば、a=2、b=3の時、aかけるbを出力せよというクエストがあり、

print(a*b)とさせたいと思うのですが、print(6)でも通ってしまうのです。

いやこればかりは出力と結果を比較しているだけだと思うのですが、問題の趣旨とはズレてしまうので何かしら対策が欲しいな~と思いました。

 

さいごに

今回ははてなブログの特別お題キャンペーンということでせっかくなのでコードクロニクルで遊んでみました。プログラミングをこれから学びたいという方は一度やってみてはいかがでしょうか。

はてなブログ特別お題キャンペーン #学び応援WEEK

はてなブログ特別お題キャンペーン #学び応援WEEK
by ギノ

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

【Dead by Daylight】公式生放送(2020/1/24)まとめと感想

はじめに

f:id:Parco1021:20191222182517p:plain

タイトルの通り、2020年1月24日にDead by Daylight開発チームによるQ&A形式の生放送が行われました。それについての個人的に気になった点のまとめと感想を書けたらいいなと思います。本記事における引用部分は全て以下のサイトです。

forum.deadbydaylight.com

 

まとめと感想

マッチメイキングについて

近日、マッチメイキングに関するニュースをお知らせします。マッチメイキングに多くの変更が加えられ、数週間後には皆さんにも違いが感じられ始めるようになるはずです。技術的な内容を含むお知らせ文を準備中ですので、しばらくお待ちください。

す、数週間後!?

マッチメイキングにどのようなアルゴリズムが用いられているのか僕は存じ上げないのですが、少なくともキラー、サバイバー共にそれなりの分布をしていれば今のような悲惨なマッチにはならないと思います。当然アルゴリズムの見直しも必要ですが問題はキラーが少ないことだと思うのです。数週間後なので結構かかりそうですね。

 

学術書Ⅰでの学び

たくさんのことを学びました。まず完了までにかかる時間が予想よりずっと長かったです。最初の目標は学術書をコンプリートするまでにリフトを完了してもらうことでしたが、マッチメイキングと学術書の調整によって当初の計画とは違うものになりました。チャレンジの難易度は私たちの希望より難しいこともわかりました。学術書Ⅰは途中で難易度を下げましたが、それは学術書Ⅱでも同様です。レベルごとの難易度上昇はⅠよりかなり少ないはずです。また、学術書Ⅱではチャレンジのレイアウトに変更を加え、難しいチャレンジはクリアしなくてもゴールできるようにしたのでゴールは簡単になるはずです。また、学術書でフィーチャーされているDLCキャラクターを持っていなくてもそのキャラのマスターチャレンジを迂回してゴールできるようにしました。DLCキャラを持っていない人は学術書をゴールできないような仕組みにはしたくなかったからですね。

んーまあ確かにⅠの最後の方になると難しかったですね。特にサバイバーは4つ発電機を回さなければならなかったので鯖専の人は大変だったと思います。Ⅱではより簡単になっているそうですね。よかったです。

 

"破滅"について

・変更の経緯

始まりは2019年7月まで遡ります。以前の破滅の効果はとても受け身であり、装備しているだけで何もしなくても効果を得られることに気付きました。加えて、スキルチェックの発生頻度がランダムであることから効果が不安定であることにも注目しました。もし発電機を修理するときにスキルチェックが発生しなければ以前の破滅は何の効果もない一方、スキルチェックが何回も出たときは苦痛に感じることもありました。私たちは初心者がゲームに慣れるのを手助けしたいと思っていますし、熟練者にとっては以前の破滅は何もなかったかのように修理されてしまうだけで効果がないことにも気付きました。

いくつかの効果を検討しましたが、「発電機に関連する呪術パーク」という点は変更したくありませんでした。初期の新・破滅は現在の効果に追加して修理速度を一律で低下させる効果も持っていましたが、強力すぎました。新・破滅は強すぎもなく弱すぎもないところに落ち着かせたいと考えていましたが、現在はちょうどいいところにあると考えています。

…………。

f:id:Parco1021:20200126155610p:plain

何もしなくても効果を得られるのがダメであるのなら有能とか工具箱もそうなのではないのですか??アイテムを引き合いに出すのもアレですけど。。。

スキルチェックのランダム性を述べるのはナンセンスの極みだと思います。"大数の法則"ってご存じでしょうか。是非ともそれを理由に出すのはやめていただきたいです。

また、熟練者には何事もなかったかのように修理されると書いてありますが、ならばなぜ赤帯のキラーの80%以上が採用していたのでしょうか。

現在の破滅は強すぎず弱すぎずとありますが、これは僕がまだ新破滅を使っていないので言及しません。 

 

Q.破滅を非・呪術パークにしないのか

A.しない。するとしたらもっと弱くしていた

感想.後退を20/30/50%でも構わないからトーテム無しにしてほしかったと個人的に思います。

 

Q.グレイトボーナス無しにしないのか

A.検討されたが、しないつもり。動向次第。

 

Q.破滅がある通知をなくしてくれないか

A.しない。初心者プレイヤーにフラストレーション

感想.僕も別に通知はあっていいと思います。

 

Q.破滅以外の遅延パークも変更するのか

A.今後もパーク間のシナジーが無くなるように調整するつもり

感想.オワッタ…。

 

発電機の修理時間を変更するか

現在は工具箱の調整を検討中ですが、基本的な発電機の修理時間を増加させることはしないと思います。生存者が発電機修理中に修理ボタンを押しっぱなしにしてじっとしている時間は現時点でも長いと感じており、発電機の修理時間を延ばす以外にもマッチ時間を延ばす方法があると考えています。マップ全体の大きさやゲーム開始直後生存者に与えられるプレッシャーが少ないという指摘も把握していますのでご安心ください。

現時点でも修理長いって感じてるらしいですよ皆さん!!!!

マッチ時間を延ばすってなんですか??わからないですすみません。

 

強くないパークを変更する予定はあるか

はい、あまり強くなく、使用率が低いパークの調整を検討しています。近い将来変更しようと考えているパークは以下の通りです。

“小さな獲物”
“無慈悲の極地”
“強硬手段”
“ツルツルとした肉体”
“寝ずの番”
“痛みも気から”
“テクニシャン”
他にも機会があったら効果を見直したいパークはたくさんあります。

 はい。上から鯖、キラー、鯖、鯖、鯖、鯖、鯖です。

うーーーーん、草!w

あれれ~?おかしいぞぉ~?キラーで使われていない弱いパークなんてごまんとあるのになぁ~???あっ(察し

 

使用率の高い鯖パークの変更は??

現在最も使用率が高い生存者パークは“セルフケア”です。他にもいくつかのパークはよく使われていますが、破滅ほどではありません。“決死の一撃”はすでに大きな弱体化を受けていますが、皆さんから効果を悪用するような使い方に関するご意見をいただいているため、どのように対処すべきか検討中です。驚くべきことに、“しなやか”の方が“決死の一撃”、“与えられた猶予”、“アドレナリン”のどれよりも使用率が高いんですよ。定番パークや戦法はプラットフォームごとに違うことがあるので皆さんの肌感覚とは違うかもしれないことに注意してください。今後何もしないと決まったわけではありませんが、“呪術:破滅”のような動機で変更されることはないでしょう。先ほどお伝えしたように“セルフケア”がもっとも使用率が高い生存者パークですが、ゲーム内で問題を起こしているとは考えていないため、現在のところ変更予定はありません。

セルフケアが高いのは納得です。しなやかは意外でしたね。あまり使っている人を知らないので。まあセルフケアのナーフはいらないと思います。ちょうどいい感じ。

DSの悪用はロッカーDSのことですね。ロッカーに入り強制的にキラーにキャッチさせることでDSを発動させるう〇ちな技です。

一般的に強いと言われているDSやボロタイよりしなやかの方が使われているということはそれだけサバイバーにライト層が多いということですよね。それに対してキラーは破滅が皆が思っている通り使用率がダントツなのはキラーをやっている人にライト層の方はあまりおらず、キラーの過疎を示唆していることだと思います。少しこじつけのようになってしまいましたが違和感を覚えたので。

 

運営様からの一言

私たちとしては、マッチが開始して最初の数分で発電機が大体2台は修理が終わると考えています。数分後以降も残り5台であり続けることは意図していません。遠くにある発電機数台を諦め、隣接している発電機を守るのに集中した方がいいかもしれませんよ。他にも動画投稿や配信を行っている人の中にはとても上手な人もいますので、参考にしてみるのもいいと思います。学ぶところがあると思いますよ。

曲解します。「破滅のナーフ如きでピーピー言ってないで発電機固めるとか作戦組めよ。自分で考えられないなら動画観て学んでね!でもトンネル対策でDSはあるしキャンプするとランクあがらんけどね!w」

こんな感じでしょうか。うーん。少なくとも"良い"文章ではないですね。

 

さいごに

僕が挙げた以外にもドクターのことについてなどなど書かれていましたが疲れたのとあまり興味がないのでやめます。初心者サバイバーのことは多く配慮されているのにキラーは軒並み無視されているイメージです。今に始まったことではありませんが今後もサバイバーの強化及びキラーの弱体化は進みそうなので焚火オンライン化が進みそうです。

仮に今キラーをやるのなら通電はするものとしてトンネルキャンプノーワンぐらいでしか僕の力では通用しなさそうです。それはそれでつまらないのであまりやりたくないのですが…。現環境でキラーをやってくれている方、この場を借りて御礼を言いたいと思います。ありがとうございます。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

「香川県条例の素案にゲーム制限」について思ったこととTwitterの反応まとめ

はじめに

本日、Twitterのトレンドに「ゲーム禁止」の文字があったので見たところ、どうやら香川県の条例でゲーム時間を"規制"するものが素案として挙がったらしい。

f:id:Parco1021:20200110201135p:plain

www3.nhk.or.jp

以下、引用です。

関係者によりますと、素案にはゲームの利用などについて、高校生以下の子どもを対象に1日あたり平日は60分、休日は90分に制限するとともに、夜間の利用は高校生は夜10時以降、小学生や幼児を含む中学生以下の子どもは夜9時以降、制限することが盛り込まれるということです。 

個人的な感想

平日は60分!?スプラトゥーンならリーグマッチもやりきれないしDead by Daylightならマッチ待機時間で終わっちゃうよ!!!!!

と言いましたがうーん…。違反しても罰則等はなくあくまで学校や親へ責務としての提示だそうですがこれはどうなんですかね。小中学生なんてゲームでできる友人関係も多く存在しますし今は良くも悪くもインターネットを通じて多くの人と繋がることができます。これによる事件等も起きてはいるのですがあくまでも悪いのは"ゲームをすること"ではなく事件を起こす人間ですからね。そもそもゲーム時間を規制したところでやる人はやりますしこれまで子供に自由にさせていた親も子供に制限をかけるかもしれないと考えると可哀想です。 

確かにゲーム依存は問題です。しかしそれは子供だけでなく、大学生や社会人の方でもそうなる可能性は大いにあります。たとえゲーム時間を制限したとして、その時間はどこへ消えるのでしょう?あくまで予想ですけどその空いた時間はyoutubeを見たり漫画を読むなどオトナ様が考える"リッパナコト"、つまり勉強へは向かわないと思います。

ゲームを禁止するのではなく、上手に付き合うことが大切だと思います。その一種として制限を設けること自体は悪くないと思うのですが制限してはい終わり!では示しがつかないと思うのです。

Twitterの主な反応

↑↑これ一番好き

さいごに 

外遊びもダメ、ゲームもダメ、スマホもダメ。次は何がダメになるんしょうか。期待です。でもこんなことを言っていますが僕はゲーム依存の対策もギャンブル依存もアルコール依存も対策はわからないです。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

【Dead by Daylight】破滅弱体化についての個人的な意見とTwitter反応まとめ

はじめに

本日1/7の午前3時に公式からドクターの仕様変更及び破滅の弱体化についての記事が投稿されました。本記事において特に注釈がない限り、引用元は以下のサイトです。

forum.deadbydaylight.com

今回はドクターについてではなく、特に破滅の弱体化について自分の意見やTwitterでの反応をまとめたいと思います。

 

f:id:Parco1021:20200107114446p:plain

引用元:Dead by Daylight攻略Wiki

弱体化のまとめ

まず、新・破滅は以下のような仕様です。

すべての発電機が”呪術:破滅”の影響を受ける。発電機が修理されていない状態であるとき、修理進行度が常に通常の発電機破壊の1/1.5/2倍の早さで自動的に後退し続ける。呪いの効果は、紐付けられた呪いのトーテムが残っているかぎり持続する。

 色々とツッコミどころは多いですが一旦置いておきます。弱体化の理由としては、

1. スキルチェック:グレイトを出せない初心者プレイヤーにとって苦痛であること。初心者プレイヤーは発電機を直そうとすることでベテランを支援しようとしがちですが、状況を悪化させてしまうこと。
2. 生存者に与え続けられるプレッシャーの度合いが殺人鬼側の労力やリスクに見合わず非常に大きいこと。
3. スキルチェックの出現率によって効果が一定でないこと。

……はい。一旦置いておきます。これ以外にも、赤帯マッチにおいての使用率は80%を超え、さらに全体としては45%であることも理由として挙げられています。そして、仕様変更により期待されることとして、

・スキルチェックへの効果がなくなるため、発電機修理中の生存者には効果がなくなります。
・殺人鬼は、パークの効果を得るためには生存者を発電機から積極的に追い払う必要があります。
・マッチ早期にはあまり役に立ちませんが、後半では非常に強力となります。生存者が呪術トーテムを探して浄化するタイミングの判断を迫られます。

…………なるほど。

要約すると

キラーがなんもしてないのに難しいスキルチェックをやらせるのは初心者サバイバーにとってストレスだよね。それに上位プレイヤーもたくさん使ってるから弱くするよ。新しい破滅はサバイバーが発電機に触れていない時に発電進行度が下がるよ。この弱体化により初心者もスキルチェックに苦しめられないし、嫌だったらキラーはサバイバーを追い払ってね。マッチの最初の方はあんまり役に立たないかもしれないけど後半は強いかもね!呪いのトーテム残っていればだけど(笑)

個人的な意見・感想

キラーをバカにしているとしか思えないです!一つずつ突っ込んでいきたいと思いますがまず破滅が使われているのは"破滅が強いから"ではなく"破滅を使わないと試合にならないから"です。プレイヤースキルが足りないと言われればそれまでですが使用率80%が全てを物語っています。

次に、初心者プレイヤーが苦痛を感じることについて。餅つきしてください。以上。

キラーがなんのリスクもなくサバイバーへプレッシャーを与え続けられるとありますが、第一すぐ破滅が壊されるのにリスクが無いとか本気で言ってんの?って感じです。開始1分足らずでパークが3つになってしまうリスクを負っています。

調整についてはもう論外だと思うのですが、このような仕様のままいくのであればせめて呪いのトーテムはなくすか発電機が残り2つになるまで呪いのトーテムが出現しないかなどの工夫をしてほしいです。最初が弱く最後に強いと公式が仰っているのに最後まで残っていないパークとか誰も使わないです。

Twitterでの反応

 鯖専の方からも反感を買っておりTwitterのトレンドにもなっていますね。。。

さいごに

これらの変更点は日本時間1月8日未明からSteam版で開始予定のプレイヤーテストビルド (PTB) でテストされる予定です。詳細なパッチノートなどは当日にご案内します。

 となっているので一応まだ確定ではないっぽいです。しかしここまでの弱体化はないにしろ多かれ少なかれ弱体化がされることは避けられなさそうですね。僕もキラー引退かな…。プレイグ買ったばかりなのに。

 

破滅がナーフ?つ ぎ は お ま え だ 

f:id:Parco1021:20200107114052p:plain

引用元:Dead by Daylight攻略Wiki

 

 

 
 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

あけましておめでとうございます。

皆様、新年あけましておめでとうございます。

 

今週のお題「2020年の抱負」ということで挨拶を書かせていただきます。 

 

読者の皆様にはこのような多種多様な記事を書いているブログに読者登録していただいて感謝しております。2019年は読者登録、はてなスター、ブックマーク及びコメントありがとうございました。

 

2020年も変わらずに多くのジャンルについてダラダラと思ったことを適当に適当な頻度で適当な時間で書いて行こうと思っているのでもしよろしければご覧になってください。

 

1月は大学の実験等が本格的に忙しくなるので更新頻度は落ちると思いますが、2月以降どんどんブーストを掛けていきたいと思っています。

 

短くなりましたが、ここで終わります。繰り返しになりますが2020年も本ブログをよろしくお願いいたします。

 

2020年は早寝早起きをしたいですね。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

Pythonでcsvを分割して読み込む(改訂版)

はじめに

半年ほど前に似たような記事を書いたのですが、それは自分が使用したコードを貼り付けただけで全く参考にならなさそうだったので簡略化したものをもう一度書くことにしました。

前回の↓

Python3で大容量のcsvファイルを分割して読み込む - 情報学部大学生のダラダラ日記

 

使用するcsvとコード

スクリーンショットで失礼します。以下のcsvを使います。

f:id:Parco1021:20191228182704p:plain

import pandas as pd

reader = pd.read_csv('tagA.csv'chunksize=5)

for r in reader:
    print(r)

chunksizeなどの説明は以前の記事に書いたのでそちらをご覧になってください。簡単に言うとchunksizeで指定した数で分割して読み込みます。なのでこのコードだと5個ずつデータを分割します。そして今回データ数は10個なので10/5で2回に分けて読み込みます。

 

結果

f:id:Parco1021:20191228181452p:plain

ご覧の通り5個ずつ2回に分けて読み込んでいることがわかります。

もう少しいじってみる

分割して読み込んだのはいいとして、これを少しいじってみます。

コード
import pandas as pd

reader = pd.read_csv('tagA.csv'chunksize=5)

for r in reader:
    row = []
    for index,rows in r.iterrows():
        print(rows[1])
        row.append(rows[1])
    print("#分割の区切り")
    print(row)

iterrows()とすることで列ごと見ることができます。具体的にはこのコードにおけるrowsはrow[0]にid、row[1]にはtagが入っています。これをさらに別々に出力させることもでき、今回はリストにも入れてみました。

出力

f:id:Parco1021:20191228185655p:plain

今回はfor文の中でリストを初期化しているのでこのような出力となっていますが、外でやった場合、全データのtagのリストとなります。また、iterrows()をiteritems()とすることで行で見ることができるので用途によって使い分けが必要です。
また、今回出力させていませんが、indexにはインデックス(0,1,...9)が入っています。

さいごに

使用機材のメモリにのらない時に多く使われる印象のあるchunksizeというオプションですが、考えようによっては他にも良い使い方がありそうだな~と思いました。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

「よいお年を」の本当の意味に一同驚愕!涙が止まらない…

はじめに

大学での講義が最後となり、担当の先生に「よいお年を!」と言われました。これまでの僕は特に何も気にすることなく誰にでも「よいお年を!」と返していたのですが、なぜかその時に(あれ…目上の人にそれ言うのなんかおかしくない…?)と思ってしまい、「ェヘヘ…(キモ愛想笑い)」となってしまいました。口頭で言う分には問題ない(と思う)のですが、文面などではそうもいかないのでちゃんとした使い方が気になり、調べてみました。調べてみるとたくさん見つかりました。

「よいお年を」の意味

新年に向けた挨拶である「よいお年を」。恥ずかしながら21年間生きてきて本来の意味を知らずに使っていたのですが、

「よいお年を(お迎えください。)」

の略ですって。はえ~、知らなんだ。個人的によいお年を(お過ごしください)の略だと思っていたんですけど違うんですね。

f:id:Parco1021:20191227185249p:plain

イメージ図としてはこんな感じでしょうか。主として"新年を迎えること"となっているので全然意味が変わってきますね。

目上の人にはどう使う?

取引先の方や仕事の上司などに挨拶する時は略さずに「よいお年をお迎えください」でいいと思います。略さずに「よいお年をお過ごしください」でも間違ってはいないと思いますが、あまりそこで我を出すのは意味がないと思うのでお迎えしましょう。

さいごに

本来の意味を調べてみましたが、そういった意味になったルーツなど調べたらたくさん出てきます。しかし、時が経つにつれて変化し、略され、僕みたいに本来の意味を知らないままでいます。僕にとってはルーツなど関係なく「よいお年を」は「よいお年を」なのです(?)。しかしそこに齟齬が生まれているのは面白いと思いました。

 

それでは良いお年を!

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

Dead by Daylight 公式生放送(12/19)のまとめと感想

はじめに

2019年12月19日にDead by Daylightの公式生放送がありました。それに関して、個人的に主だった点について引用し、感想を書いていきたいと思います。引用元は全て以下のサイトです。

開発チームQ&A生放送 | 2019/12/19 — Dead By Daylight

マッチメイキングについて

現在マッチメイキングがあまり良くない状況であることは認識しています。年末年始に向けマッチメイキングシステムを調整してマッチングを成立しやすくし、年が明けてから問題の解消に取り組む予定です。一部の方からは殺人鬼のマッチングに問題があるというご意見をいただく一方で、他の方からは生存者のマッチングに問題があるというご意見をいただいています – これは色々な条件が絡んでおり、両方とも正しいご意見です。皆さんのご意見とご理解、ご協力に感謝しています。

キラー側にも鯖側にも問題があるってそれ全部問題あるやんけ…。キラー側にも問題があるということはここでいうマッチメイキングとはマッチする速さではなくランク差マッチングのことを指していそうですね。緑帯vs赤帯などがよく起こっているのでそれだと思います。個人的にはキラー側が少なすぎて無理矢理マッチさせられていると思っていましたがどうやらそういうことではなさそうです。

BP2倍について

獲得BP2倍イベント「ブラッドハント」を日本時間2020年1月3日から開催します。最初のリフトの終わり際と重なっているので、ラストスパートをかけてくださいね。

日本語訳した感満載の文ですが、年明け1月3日からBP2倍イベントが始まるらしいです。いつも通りだと学生が冬休みが終わるぐらいまででしょうか。なんにせよ正月なのであまりできなさそうです。

冬イベについて

過去の開発者アップデートでお知らせした通り、冬のイベントは実施しません。その分、不具合の修正や新コンテンツの制作のために時間を割きます。先ほどお知らせしたブラッドハントは開催しますが、ゲーム内でのお祝いは行いません。

ほ、ほーん…。冬イベをやらないほどにバグ修正励むんだな???って感じです。よほどの致命的なバグでない限りバグもDbDの魅力の1つなのでそれよりイベントやってほしかったですね。バグの修正はおそらく建前なんでしょうけど…。シンプルに忙しいんですかね。

キラー専用BGMについて 

それは現在検討中です。デモゴルゴンに専用BGMをつけたときは皆さんに好評でした。また、更新を行う殺人鬼に専用BGMをつけることも検討したいと思っています。例えば、殺人鬼ドクターは能力のアップデートが行われたとき専用BGMをつける予定です。

鬼に専用BGMがついたことからの質問の回答です。 これは今後も専用BGMが付き続けると捉えていいと思います。専用BGMあると鯖側としてもなんのキラーかすぐわかりますし、シンプルに好きなのでガンガン付けてもらいたいです。デモゴルゴンのBGMもホラーゲームって感じで好きです。あの何かアクションする度に叫ぶのも専用BGMかな?

ロビーで味方のランクが見えなくなったことについて

生存者がお互いにランクを見られるように戻す予定はありません。他の生存者のランクを見てロビーを抜けて欲しくないからです。ロビーを抜けるプレイヤーはマッチメイキングに非常に大きな影響を及ぼします。現在発生している問題も含め、マッチングの欠点を悪化させるよりは軽減させる方向に進みたいと考えています。 

これには納得&戻すべきではないと僕も思います。やはり味方のランクを見て抜ける人はいます。また、デイリー消化で特定の鯖を使うことはしょうがないと僕は思っています。 これによりマッチが遅くなるのを予防できるので良きです。

スマ着ナーフについて

“スマートな着地”の着地硬直削除効果は、特定の条件で無限に捕まえられない状況を生み出していました。疲労時は着地硬直削除効果をなくすことでこれに対策を行い、代わりにうめき声をなくしました。これによって殺人鬼を混乱させて貴重な時間をかせぐチャンスが生まれるはずです。 

これは…どのような条件なんでしょうか。パンプキンレーンかしら。わからないけど”無限に”捕まえられないなんてあるんでしょうかね。わからない。

ドクターの仕様変更について

まだすべてをお伝えすることはできませんが、今回は特別に身体に電撃が走るような情報を先行公開したいと思います。これはまだ開発中の情報であり、実装前に変更される可能性があるのにご注意ください。また、今回お話しすることが変更点のすべてではありません。

まず、ドクターの放電フィールドは削除します。ドクターをプレイしている人にとって、生存者のすぐ近くを通ったときに相手が叫び声をあげない可能性があるのは不合理に感じることがあると思います。一方生存者にとっては、殺人鬼になにもされていないにも関わらず狂気度があがっていくのはうんざりする要素であると感じました。

その代わり、ドクターは新しい能力『放電ブラスト』を獲得します。放電ブラストはドクターの脅威範囲内全体に電撃を与える特殊攻撃で、発動時に範囲内にいるすべての生存者は叫び声をあげ、狂気度がティア1段階分急上昇します。放電ブラストのチャージには2秒必要で、一度発動すると60秒のクールタイムがあり、ブラストの範囲は脅威範囲の大小に影響されます。

放電フィールドと同じように、治療モードも削除します。ドクターはモードを切り替える必要なくショック療法を行えるようになり、ショック療法の直後に生存者を攻撃することも可能です。新ドクターの移動速度は現在の処罰モードと同じ4.6m/秒とする予定です。

また、アドオンも変更されます。ウルトラレアのアドオン“玉虫色のキング”は疲労効果を削除する代わりに、狂気状態ではスキルチェックの針が逆回転する効果を与えるようになり、既存のスキルチェックが画面のどこに現れるかわからない効果と合わさってスキルチェックが難しくなります。また新ウルトラレアアドオン“玉虫色のクイーン”は放電ブラストやショック療法で電撃を受けた生存者を帯電させることができ、帯電した生存者が次に他の生存者の4m以内に近づいたときその生存者を感電させて叫び声を上げさせる効果とする予定です。

これは大きな仕様変更ですね。治療モードを削除し、新コマンド「放電ブラスト」を発動することで"心音範囲"内の鯖全員の狂気度が+1される、というものです。 これは強いんじゃないかなーーーと個人的に思っています。60秒という長めのクールタイムがありますが、索敵がめちゃくちゃ強くなりますし、爆音ドクターヤバそう。でももうこれは別のキラーだと思った方が良さそうですね。楽しみです。

その他

他にも鬼についての質問など多くの事がQ&A形式でまとめられているので気になったら見てみてください。

さいごに

今回は最新情報(3日前ですが…)のうち気になったところを抜粋し、個人的な感想を書いてみました。気になった点としては最近ずっとそうですが「サバイバーが~」など鯖主体の調整及び記述が目立ち、ただでさえキラーが少ないのにより少なくなりそうだな~と危惧しています。マッチが速くなってくれれば僕はなんでもいいですけども!

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

2019年の終わり、それはPython2の終わり。

僕は知らなかったのですが、Python2がサポート終了するのが2020年1月1日に大分前から決まっていたようです。公式のドキュメントはこちら↓

www.python.org

「Python2の日没」ですって。オシャレ。

ドキュメントによると、2000年にPython2が始まり、2006年にPython3が作られた?のですが、初めはPython3がよろしくなかったらしくPython3へ移行する人があまりおらず、結局Python2を使う人とPython3使う人が共存してしまい、両方改良を続けていたようです。

こうなってしまった原因として、2系と3系で互換性がないことが挙げられます。僕も最初ネットを参照しながらPythonを書いていたらネットには2系と3系が混在しており、エラーが無くならず心が折れかけました。例としては2系ではprint "Hello World"であるのに対し、3系ではprint ("Hello World")のようになります。僕は3系しか使ったことがないので他にはわかりませんが、多くの違いがあり、全くの別言語らしいです。

話を戻して、両方改良するのはさすがに公式さんも大変だったらしく、2008年に「2015年にサポートを終了する」というアナウンスをしたそうです。しかし、2014年にそれは厳しいと判断し、2020年に終了すると先延ばしにしました。

今は2019年12月末。あと少しでPython2のサポートが終了します。Python2しか使ってない!って人も、2to3というPython2を3へ変更するモノがあるらしいので応急措置ですが大丈夫です。あくまで応急措置なのでPython3のお勉強をしなければなりませんが…。

あとどれだけでサポートが終了するか示すサイトもあるぽいです。

Python 2.7 Countdown

あと10日と4時間です。

f:id:Parco1021:20191221193057p:plain

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

子どもの頃サンタに貰えて嬉しかった物「ダイヤモンド・パール」

はじめに

 クリスマスプレゼントで貰ったもののうち、まだ純粋無垢な小学生の時の僕が貰った物について今週のお題「クリスマス」ということで書きます。

その物とは??

ズバリ、「ポケットモンスターダイヤモンド・パール」です。神ゲーです。

兄が同じ時にダイヤモンドをお願いしていたので僕はパールをお願いしました。一般的にダイヤモンドの方が人気(異論は認めます)なので、僕も同様にダイヤモンドが欲しかったのですが、やはり兄弟あるあるなのでしょうか。弟の僕はいつも"じゃない方"を買っていました。

なぜ一番嬉しかったのか

それは単純に遊んだ量が尋常ではなかったからです。2006年に発売され、すでに13年経っているのですが、未だに僕と歳が近い人には「ダイパはよかった」と言わしめるほどです。そしてリメイクを期待されています。

 

僕個人的に魅力を感じている点としては音楽です。著作権の諸々なのとitunesで見つからなかったので試聴はないのですが、全ての音楽が素晴らしかったです。

少しだけですがありました。編集されてますが。

戦闘!ディアルガ・パルキア/やりのはしら

戦闘!ディアルガ・パルキア/やりのはしら

  • provided courtesy of iTunes

 

湖の神々 (戦闘!ユクシー・エムリット・アグノム)

湖の神々 (戦闘!ユクシー・エムリット・アグノム)

  • provided courtesy of iTunes

あぁ~~(感動)

曲調は変わってますがこれも良きですね。 

僕が一番好きなのはミオシティです!!優しい曲調で好きなのです。

 

曲以外にもシンプルにこの作品が好きで結局ダイヤモンドを買っては何度もストーリーをやったり友達と対戦するためにこの世代で厳選したりしてました。懐古厨は嫌いなので「この世代の厳選はな~」とか言いません。

ポケモンについて

ダイヤモンド・パールの前にリーフグリーンサファイアもやっており当時やっていたポケモンは全て好きでした。しかし、プラチナの後に発売されたハートゴールドは殿堂入りする前に飽きてしまい、その後BWやXYなどは買いませんでした。大学生になってムーンを買ったのですが殿堂入りまでしかやらず、レートに潜ることはありませんでした。

そして最近発売されたソード&シールド通称剣盾。ムーンの苦い思い出もあり最初は買う気もやる気もありませんでしたが、友人が貸してくれました。やらずにつべこべ言うのも良くないからね!貸してもらった当初はモチベーションがかなりあり、10時間ほどでライバルのホップにいらいらしながら殿堂入りをし、さあ厳選だ!ってところでモチベーションがどこかへ行ってしまいました。そのままDead by DaylightやFortniteへ戻ってしまい、友達にやらないなら返せと脅され、泣く泣く返しました(泣いてない)。

ではポケモンが好きではないのかと言われると否です。実況者の動画も観ますし、今ポケモンのデータを使った開発もしようとしています。歳を重ねるにつれて単純作業ができなくなってしまったのかあるいはダイヤモンド・パールからやらなさすぎて世界観のギャップについていけていないのか、はたまたあるいは他にやるゲームがあるかはわかりません。

さいごに

僕は元々音楽や世界観などが好きだったのでこのような付き合い方になるのは自然かもしれません。しかし、理屈っぽく考えても答えはないのでこの辺で終わります。もしサンタが僕にプレゼントをくれるのなら現金がいいです。10万円ぐらいください。

 

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

数値微分法についてまとめてPythonで色々してみる

 勾配法あたりでやたらと見る数値微分法について調査し、まとめてみました。

 今回、理論的なことは以下の書籍を参照し、図とプログラムは1から自作したものであり、特にプログラムは筆者がその場で簡易的に考え実装したものです。変数名などおかしい点がありますがご容赦ください。

数値微分法とは

 勾配法においてはある重み{\displaystyle w_1 }において、誤差関数{\displaystyle E(w) }{\displaystyle w }に関して偏微分したものの符号を入れ変えたもの{\displaystyle -\frac{∂E}{∂w} }の方向に重み{\displaystyle w_1 }を更新します。この偏微分という動作をしなくても近似を使うことによって重みの更新をしちゃおう!というのが数値微分法の目的です。

 

 まず、微分の定義を思い出します。

{\displaystyle \lim_{h \to 0} \frac{f(x+h)-f(x)}{h} }

これが見慣れた形ですが今回は文字を変えて

{\displaystyle \lim_{ε \to 0} \frac{E(w_1+ε)-E(w_1)}{ε} }

とします。

f:id:Parco1021:20191215170236p:plain

余談ですが、式だけだとわかりづらいので僕が誰かに微分の定義を説明する時は上みたいな図を描いてこのεを0にもってくとその点での接線になるでしょ??って言います。

 

まず、数値微分法のうち、2点近似を紹介します。図は↑と同様で、式は

{\displaystyle \frac{E(w_1+ε)-E(w_1)}{ε} }です。

 数値微分法では極限などを使わず、手動で限りなく小さいεを設定することで勾配を近似します。例えばεを0.001と設定し、{\displaystyle E(w)=w^3 }{\displaystyle w_1=3 }とすると、

微分法:{\displaystyle E'(3)=27 }

数値微分法(2点近似):{\displaystyle E'(3)≒27.009001‬ }となり、誤差は約0.01ほどになります。

 

 では、より誤差を減らす方法はないの?と思ったそこの奥様!あります。三点近似(中心差分)という手法です。図は先ほどと異なります。

f:id:Parco1021:20191215173433p:plain

そして式は

{\displaystyle \frac{E(w_1+ε)-E(w_1-ε)}{2ε} }です。

試しに先ほどの2点近似と同様の条件で計算してみると

数値微分法(3点近似):{\displaystyle E'(3)≒27.000001‬‬ }となり、誤差が0.000001にまで減りました。

 

Pythonで観測

式自体は単純なものなので書く必要もないと思いますが、通常の微分したものとの差をグラフに描画するプログラムを書きます。

import matplotlib.pyplot as plt
%matplotlib inline

Ew = lambda w: w**3
Gw = lambda w: 3*w**2
e = 0.001
w = [-10000,-100,0,2,16,64,100,1000,10000]
_two = []
_three = []

def normal(w):
    E_dashn = Gw(w)
    return E_dashn
    
    
def three_point(w,e):
    E_dashth = (Ew(w+e)-Ew(w-e)) / (2*e)
    return E_dashth

def two_point(w,e):
    E_dashtw = (Ew(w+e)-Ew(w)) / e
    return E_dashtw

for i in range(len(w)):
        _two.append(two_point(w[i],e)-normal(w[i]))
        _three.append(three_point(w[i],e)-normal(w[i]))

plt.plot(w,_two,label='2point')
plt.plot(w,_three,label="3point")
plt.show()

プログラムは単純なものです。式Ewとそれを微分した式Gwを用意し、wを変化させた時の2点近似と3点近似と通常微分との値の差を取っています。

 

結果

f:id:Parco1021:20191215192757p:plain

グラフを観ると、2点近似は単調増加しており、3点近似は変化していません。これは今回の{\displaystyle E(w)がw^3}であることと、それぞれの式を観れば自明です。そして2点近似と3点近似の優劣は関数{\displaystyle E(w) }が変わっても変化しないでしょう。よって計算量が増加するというデメリットがありますが、3点近似を使う方がより誤差を減らすことができます。

参考文献

 

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

2次方程式や3次方程式の解と係数の関係の導出方法

 解と係数の関係、知っていますでしょうか。結構な頻度で使われるので受験を経験した人達は覚えていると思います。しかしセンター試験レベルだとせいぜい使っても2次方程式の解と係数の関係ぐらいなので暗記でも乗り越えられるのですが、突然3次方程式の解と係数の関係を使う問題がでた時に困ります。そんな時に導出方法を知っていると役に立つと思うので知らない受験生は知り得です。

2次方程式の解と係数の関係

2次方程式{\displaystyle ax^2+bx+c=0 }が2つの解{\displaystyle α,β }を持つとき、

{\displaystyle α+β=-\frac{b}{a} }

{\displaystyle αβ=\frac{c}{a} }

が成り立ちます。僕は「マイナス(-)を忘れる奴はば(ba)か(ca)」と覚えろと教わりました。まず、2つの方法で2次方程式における関係を導出してみます。

 

 

1つ目は解の公式を使います。

 x=\frac{-b±\sqrt{b^2-4ac}}{2a}

この場合、解は{\displaystyle α,β }なので

{\displaystyle α+β=\frac{-b+\sqrt{b^2-4ac}}{2a}+\frac{-b-\sqrt{b^2-4ac}}{2a}=\frac{-2b}{2a}=-\frac{b}{a}}

{\displaystyle αβ=\frac{b^2-(b^2-4ac)}{4a^2}=\frac{c}{a} }

となります。

 

2つ目は因数定理を使います。

※因数定理

{\displaystyle f(x)が(x-α)を因数(掛け算として表したときにその個々の数のこと)持つことはf(α)=0となるための必要十分条件である }

 

これを使うことにより

{\displaystyle ax^2+bx+c=0がα,βを解に持つ⇔A(x-α)(x-β)=0 }とすることができます。

右辺を展開すると

{\displaystyle Ax^2-A(α+β)x+Aαβ=0 }となります。そこで元の式と比較すると

{\displaystyle a=A }

{\displaystyle b=-A(α+β) }

{\displaystyle c=Aαβ }となるのでここから

{\displaystyle α+β=-\frac{b}{a} }

{\displaystyle αβ=\frac{c}{a} }が求められます。

 

2つ導出方法を紹介しましたがどちらを覚えるべきでしょうか?どちらも覚えてほしいですが重要なのは2つ目です。理由は解の公式は4次式までしかありませんし、とてもじゃありませんが覚えるなんて不可能に近いです。とりあえず2つ目の方法を使って3次方程式の解と係数の関係を求めてみます。

{\displaystyle ax^3+bx^2+cx+d=0 }が3つの解{\displaystyle α,β,γ }を持つとき、因数定理より

{\displaystyle A(x-α)(x-β)(x-γ)=0 }となります。展開すると

{\displaystyle Ax^3-A(α+β+γ)x^2+A(αβ+βγ+γα)x-Aαβγ=0 }となるので係数比較すると

{\displaystyle α+β+γ=-\frac{b}{a} }

{\displaystyle αβ+βγ+γα=-\frac{c}{a} }

{\displaystyle αβγ=-\frac{d}{a} }となります。

まだ2次と3次しか見ていませんが何か規則性が"観えて"きますね。ムムッ

1次の時は{\displaystyle α=-\frac{b}{a} }ですし多分解を足したら同じ結果になるんでしょうね。あとは解を掛けたら定数項/aとか。

さいごに

 今回は手計算でごり押し風に3次までやりましたが5次あたりからきつくなると思います。なのでn次として一般化しなければならないのですが、そこは僕も受験生時代お世話になった以下のサイトさんがやっててくれました。

mathtrain.jp

上のサイトにあるならやらなくていいんじゃないかという声が聞こえてくる気がしますが、高校数学あたりの公式の証明って良い頭の体操になるんですよ。それに"調べれば"出てくるという仮定つきなので調べなくても誰かの目に留まればいいなって感じです。自己満です。頭の体操としてやったのでサイトを観ていません。なのでもし間違っているところ等あればこっそり教えてください。

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

一人暮らしのQoLを上げたモノ

はじめに

 久しぶりに、今週のお題「2019年買ってよかったもの」ということで僕が買って一人暮らしのQoLが爆上がりしたモノを紹介します。2019年に僕個人として大きな買い物はしていないので決して高価なものではありません。

そのものとは??

 ズバリ、「」です。鍋と言っても一人用の鍋です。

鍋料理のイラスト

僕が買ったのは金属なので保温性はあまりありませんが、別に一人で食べる分にが僕は気にしません。土鍋と違って割れる心配もあまりありませんし酷使するつもりだったので金属にしました。

 

これまで何度も一人鍋をしようとしましたが、片手鍋だとイマイチ気分が乗らずあまりやってきませんでした。ではなぜ一人鍋をそこまでしてしたかったのか理由を挙げます。

楽で安くて野菜も摂れる

 理由はこれにつきます。どんなに時間がなくても適当に調味料いれてつゆ作ってから具材を放り込むだけです。具材も事前に一回用に切り分けて冷凍してあるので本当に何もせず完成します。また、一人暮らしだと(僕は)野菜を摂るのが面倒くさくて食べない日もあるので鍋はありがたいです。

さいごに

 一人用の鍋がなくてもいい人間だったらよかったのですが、そうではなかったので買った結果、安い・美味い・健康の三拍子を手に入れられました。食べ過ぎて太りましたが…!!一人暮らしをしている方はこれから寒くもなりますし鍋が美味しくなるので買ってみては如何でしょうか。

 

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

スポンサーリンク