blog.tmp.tokyo

No Promises Await at Journey's End

新シリーズに向けた準備記事

このブログで人気記事は大きく3つあります。

  • 羽田空港の滑走路運用の記事
  • Deep Learning 関連の記事
  • (なぜか)無双OROCHI3 最強武器の記事

羽田の話は最近空港に行けてなくて書けないので、少し Deep Learning 関係の記事をしっかり書いていこうと思います。

今回はそのための準備記事になります。

これまでの記事

まず、これまで書いてきた人工知能、AI、機械学習、深層学習(Deep Learning)関連の記事を整理しておきます。

TensorFlow に関する記事

最初に書いた「TensorFlowはじめました」の本をベースに書いた記事です。

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

Chainer に関する記事

一度だけ書いた Chainer に関する記事。

www.blog-tmp.tokyo

Deep Learning に関する記事

これが割と息の長い記事になっております。

旧版

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

新版

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

これまでの反省

記事を見ていただくとわかりますが、機械学習とか Deep Learning と言いつつも、iPhone でやることに特化しすぎていました。それ自体はネタにもなって引用していただいたりしたことはありますが、結果的に機械学習とかを利用して何か作れたわけではありませんし、目的と手段がやや逆になっていたと言わざるを得ません。

iPhone でやることに関しては通勤時間が長かったので、その時間をうまく活用したいという思いから着想を得ていましたが、新型コロナウィルスによる外出自粛の影響により、通勤時間はゼロになりました。iPhone にこだわる必要はなくなったのです。

今後の展開と新シリーズ

新シリーズを立ち上げます。内容としてはこれまで通り「ゼロから作る Deep Learning」をベースとした学習内容になりますが、私が学ぶ上でふと疑問に思ったことを徹底的に深掘りして調べてみたり、試したり、考えたりしたことを1記事1つ紹介していきます。

したがって「ゼロから作る〜」の本に書かれた内容を順に追って記事にしていくことはしません。そういうことをしている記事は多くありますし、そちらを見ていただく方が詳しいのでためになります。

私は私なりにじっくり顕微鏡で拡大して見るように一つのことに着目して、その疑問点を解決して次に進もうと思っています。

そのための学びはすでに始めており、違和感を感じたり、少しでも疑問に思ったことは解決するまで先に進まないようにして勉強しているので進みは遅いですが、これまでよりよく理解できていると思っています。それを紹介していきたいと思います。

たぶん、同じように疑問に感じている人もいるかと思います。少しでもヒントになればと思います。

数式の記述

機械学習や Deep Learning の内容はどうしても数学とは切り離して考えることはできません。私は大学では物理学を専攻していたので数式が出てきてもそれなりには理解できますが、上にも書いた通り私が疑問に思わなかったことは書きません。

数式に関しては、はてなブログに機能が用意されており TeX の記法が使えるようなので、そちらを利用して書きます。

数式の練習

試しにいくつか数式を書いてみます。はてなブログでは MathJax を利用しているみたいです。私は大学では LaTeX2e を利用して卒論を書きました。

簡単な方程式

まずは簡単な方程式を書いてみます。

 x^{2} + 2x + 1 = 0

こんな感じになります。いわゆる2次方程式ですが、これは以下のような技法です。

[tex: x^{2} + 2x + 1 = 0]

この書き方をコピーすれば皆さんのブログでもそのまま使えます。はてなブログに用意されていますので。教科書とか数学の本に書かれている数式が美しく書けるのです。これが TeX というソフトウェアです。

分数

分数ももちろん書けます。

 \frac{1}{2} + \frac{2}{3}

これは以下のように書きます。

[tex: \frac{1}{2} + \frac{2}{3}]

ちなみに皆さんはこの  \frac{1}{2} + \frac{2}{3} はできますか?答えは  \frac{3}{5}ではありませんよ。念のため。

連立方程式

少し書き方が分からなくて悩んだのがこれです。


\begin{cases}
2x + 3y = 0 \\
5x + 7y = 8
\end{cases}

これのポイントはいくつかあって、ひとつは2つの式をまとめるカッコです。そして、もうひとつは式の改行です。

[tex:
\begin{cases}
2x + 3y = 0 \\\
5x + 7y = 8
\end{cases}
]

パーセプトロン

また初回にも出てきますが。

 \displaystyle
y =
\begin{cases}
w_1x_1 + w_2x_2 \; \leq \; \theta \\
w_1x_1 + w_2x_2 \; \gt \; \theta
\end{cases}

こんな感じで書いています。慣れると複雑と思わなくなるのが不思議です。

[tex: \displaystyle
y = 
\begin{cases}
w_1x_1 + w_2x_2 \; \leq \; \theta \\\
w_1x_1 + w_2x_2 \; \gt \; \theta
\end{cases}
]

\displaystyle はあってもなくてもそんなに影響なさそうです。少なくとも私の環境では。その他、次のような数式が出てくるので試し書きしてみてます。

パーセプトロン (バイアス込み)


y = h(b + w_1x_1 + w_2x_2)


h(x) =
\begin{cases}
0  \;\;\; (x \leq 0) \\
1  \;\;\; (x \gt 0)
\end{cases}

[tex: 
y = h(b + w_1x_1 + w_2x_2)
]

[tex:
h(x) = 
\begin{cases}
0  \;\;\; (x \leq 0) \\\
1  \;\;\; (x \gt 0)
\end{cases}
]

ReLU 関数

活性化関数の一例として出てくる ReLU 関数。

 h(x) =
\begin{cases}
x  \;\;\; (x \gt 0) \\
0  \;\;\; (x \leq 0)
\end{cases}

[tex: h(x) = 
\begin{cases}
x  \;\;\; (x \gt 0) \\\
0  \;\;\; (x \leq 0)
\end{cases}
]

シグモイド関数

こちらも活性化関数の一例として登場。

 h(x) =
\frac{1}{1 \; + \; \exp(-x)}

[tex: h(x) =
\frac{1}{1 \; + \; \exp(-x)}]

積分

インテグラル。あまりよくわかりませんが、この場合は \displaystyle をつけないと大きくなりません。やはり影響ありますね。

\displaystyle
\int_1^{t} f(x)

[tex:\displaystyle
\int_1^{t} f(x)]

平方根

いわゆるルートの記号です。

 \displaystyle
\sqrt{4} = \sqrt{b^{3} - 2ab + a^{2}}

[tex: \displaystyle
\sqrt{4} = \sqrt{b^{3} - 2ab + a^{2}}]

行列・場合わけ/書き方

全体的に TeX の書き方をネットで調べてはてなブログ用の書き方というところをそのまままねても表示されないなぁと悩んでいたら、Markdown 記法でやっているからみたいでした。みたままとかでやれば良いらしいのですが、今更変えられないので Markdown で表示できる方法を模索します。

<pre style="border: none;">[tex: \displaystyle
\begin{pmatrix}
a & b & y\\
c & d & x \\
c & abc & g
\end{pmatrix} \; + \;
\begin{pmatrix}
2a & b & y\\
c & d & 4x\\
c & x & f
\end{pmatrix}]</pre>
<pre style="border: none;">[tex: \begin{array}{ll}
0 & (x \lt 0) \\
1 & (x \gt 0)
\end{array}]</pre>

行列や場合わけは機械学習の分野でも頻出なので書けるようにしておかないと話が進みません。なぜか上の書き方を後に載せると TeX が変換されないので順番を逆にしてます。ここだけ。

Markdown で書くと &amp; と変換されてしまうので、たぶんバグなんですけど運営はバグをなかなか認めないし、直す気もなさそうなことが多いので自己解決が基本です。

<pre> タグで [tex: ] を囲めば良いことは探した結果見つけました。ただ、これだと数式の周りを四角い罫線で囲われてしまいます。全部そうなれば別に良いのですが、行列とかだけだと統一感がありません。

仕方なく <pre style="border: none"> で消せば良いか、と。はてなブログのデザインCSSに書くと普通のコードとかで囲む方まで消えてしまうので、使うところで消すのがテクニックです。

行列・場合わけ/表示

上の書き方は以下のようになります。行列はこんな感じです。

 \displaystyle
\begin{pmatrix}
a & b & y\\
c & d & x \\
c & abc & g
\end{pmatrix} \; + \;
\begin{pmatrix}
2a & b & y\\
c & d & 4x\\
c & x & f
\end{pmatrix}

続けて場合わけです。

 \begin{array}{ll}
0 & (x \lt 0) \\
1 & (x \gt 0)
\end{array}

まとめ

  • 今後の人工知能関係の記事にご期待ください。
  • はてなブログ(Markdown記法)での TeX の書き方は少しクセがあるので当記事を参考にしてください。

テレワーク初心者に現役プログラマが教えるアナログなタスク管理術

お題「#おうち時間

テレワークしてますか?私は4月は初日に出社して以来、1日も会社に行ってません。自宅でテレワークを始めるとZoomだSkypeだ、とかSlackだとか日頃使い慣れないツールに四苦八苦している方も多いのではないでしょうか。

慣れない仕事環境や家族がいる環境での仕事に落ち着かなかったり、バタバタして時間が過ぎて本来やらなければならなかった仕事が全然できてなかった、なんてことがないでしょうか?

そんなあなたに私がテレワークで実践するタスク管理術をご紹介します。

テレワークは忙しい?

テレワークを本格的に始めて2〜3週間経ちますが、会社に出勤している頃よりも忙しい気がします。常に誰かとZoomでのテレビ会議をしていますし、Slackで誰かから質問が来たり、上司からメールが来たり、Zoomで会議の招待が来たり・・・。

なんでこんなに忙しいんだ?

ぶっちゃけ、会社に出勤している頃より真面目に仕事している気がします。よく家で仕事をしているとちゃんと仕事しているかわからない、と言う人がいますが、私に言わせれば会社に行ってるからと言って真面目に仕事しているとも限らないのです。

相手が見えないから

周囲の人にはなんかあればいつでもSlackで声かけてね、と言っているので質問投げられたりするのは仕事のうちなのですが、会社にいる時は姿が見えてるから、私が会議や打ち合わせ、誰かに説明している時はその姿を見ているので聞いてくるのを控えて、終わってから声をかけてきたりします。

しかし、テレワークだと相手の姿が見えないので、私がいま何をしているのかわかりません。Zoomとかだとテレビ会議中とかアイコンが小さく変わりますが、気付きにくいですし、いちいちSlackとかZoomのステータスを設定するのも面倒です。

いつでも声かけてくれていいけど、みんなからアレコレ来るから回答はシーケンシャルに返すからね

とすることにしました。

あえてアナログ

要は質問や問い合わせや会議の予定が来た時はタスク管理しておけばいいわけです。そうすればやることが漏れないし、全部片付ければ仕事終わりにできます。

デジタルなツールは沢山ありますが、SlackとかZoomとかメールとか常時起動して外部ディスプレイに表示させながら仕事をしているので、これ以上デジタルツールを増やすのは避けたかったのと、直感的に見てわかるタスク管理がしたかったのであえてアナログでやってみることにしました。

ダイソーのアイテムだけで実現

もともと別の目的で買い置きしておいたものもありますが、それを活かすためのものもあると便利なので食料品を買う時にダイソーへ行って見繕ってきました。仕事で使うものを買うので不要不急には当たらないと考えています。

情報カード

こんなカードが100枚セットで売っています。

サイズは125mm × 75mmです。名刺サイズよりも少し大きめです。別に名刺サイズでもそれ以上でも以下でもなんでもいいですけど、カードにした方が良いと思ってカードにしています。

無地のものと罫線があるものがあります。これもどっちでもいいと思います。好みというか売ってない時とかもあるので。なければ付箋とかでもいいと思います。

もともとこれだけ持っていました。速読だかなんかの本を読んだ時に使うといいと書いてあって、ダイソーに行くたびに買っておいたのですが結局何もやらず、今になって役立ったというわけです。

メモ用紙でもなんでもいいので、バラバラになる紙を用意すればいいと思います。ただ、あまり大きい紙だと一枚の紙にたくさんのタスクを書いてしまうので、カードくらいがいいと思います。

仕分け用のケース

カードだけ用意すればタスク管理できますが、できれば仕分け用のケースもあると便利です。

なんでもいいと思いますが、私はこんなのを買ってきました。いくつか仕切りがついていて、カードを分類して立てかけることができるものです。

カードのサイズ的にこんな感じになります。

カード立て

カード立てもあるも便利です。

ダイソーだと木の立方体のものがクリップ付きと立方体に切れ込みが入っているものの2個セットのものが売っていました。写真の透明の立方体のものは元から家にあったものです。

シュレッダー

なんとダイソーにも売っていました。

500円商品ですけど結構コスパいいです。なんとなく下の透明ケースの強度に不安が残りますが、500円なら壊れたら買いなおせばいいかな、と。

いざタスク管理

準備は以上です。

STEP 1 紙に書き出す

まずはカードにタスクを書き出していきます。大事なことは1つのタスクは1枚のカードに書く、ということです。1枚のカードにいくつもタスクを書くと管理できません。

カードはケチるな。所詮100円だ。いくらでも手に入る。

今日やらないといけないこと、誰かから聞かれたこと、答えないといけないこと、会議予定、そんなものを書き出していきます。仕事中に増えてもカードなら追加できます。発生したらその都度書きます。

STEP 2 並べる

次にやる順に並べます。

まあ、例なので簡単に書いてますけど実際は具体的な名前とか資料の名前とか書きます。それをやらないといけない順番に並べておきます。私はたまたまデスクにサイドテーブルがあるので、そこに並べています。どこか見えるところに並べておけばいいでしょう。

この並べるというのがこのタスク管理の最大のポイントです。

後から発生したものでも、優先度が高ければ間に割り込ませたり、先頭に持ってきたりします。やる順番に並べてください。たまにこういうことを書くと「どの順に並べるのが正解ですか?」とか聞いてくる人が会社にもいます。

知らねーよ。お前が決めろ。

としか言えません。社会人の必須スキルのひとつは物事の優先度を決めることです。コツとしてはやることを決めるよりもやらないことを決めた方が良いです。あとでいいものを後ろに持っていけば必然的に優先度の高いものが前にきます。

上司からいつまでにやれと言われた、とかこっちを先にやれと言われた、とか指示があると思います。なければ聞いてください。

STEP 3 働く

カードを並べたら先頭から順番に仕事をしていきます。今やっているタスクのカードを先程紹介したカード立てとかに立てておくのもわかりやすくて良いと思います。

やっている最中に何か記録しておくことがあればカードにメモしておきます。大きめのカードを選ぶ理由はこの辺にあるのですが、裏とかも書けるので作業内容のメモなども書いておくと後から整理しやすいかと。

STEP 4 終わったら「済」にする

終わったら「済」とか書いておきましょう。

赤いハンコとかあればいいんですけど、手元にペンしかないので済と書いてます。

終わったものは並べておいても良いですが、私はタスクの数を減らしていく方が仕事が進んでいる感じがするので、並べているところはだんだん減っていく感じにしています。

そのために先程紹介したカード仕分け用のケースが活躍します。上の写真のように、まだ未使用のカードを取り出しやすいように何枚か入れておいたり、済にしたカードを入れたりしてます。

STEP 5 1日の振り返り

1日の仕事が終わると全部のカードに「済」の文字が入ると思います。

「済」のつかないカードは翌日に持ち越しすれば良いでしょう。持ち越しカード以外、全部「済」になれば仕事が終わりです。ポイントは「タスクにない仕事はしない」ということです。細かい事務的なことであってもタスクにあげておくのがいいと思います。

私は1日の振り返りとして、カードを見ながらその日の仕事の内容を文章でまとめています。WikiとかMarkdownとかと同じ仕組みで、テキストからHTMLの文書を吐き出すプログラムを自分で書いたのがあるので、それを使って日々仕事の内容を書き出しています。2〜3年前にヒマでやることがない時に思いつきで書いたプログラムですが、割と便利で役立ってます。

Word でも Excel でもいいので、カードの内容を見て今日やったことを確認・記録しておくのもいいと思います。

STEP 6 破棄

まとめが終わったらカードは不要になります。要らなくなるので基本的には溜め込む理由もないため捨てレバ良いのですが、仕事の内容をメモしたりするので迂闊に捨てるのも気が引けます。

そこで登場するのがシュレッダーです。500円ですがカードも1枚ずつストレスなくシュレッドできます。

クロスではないですが、とりあえず家庭で捨てるには十分かと思います。これではダメという人は焼くなり高いシュレッダ買うなりしてください。

まとめ

いかがでしたでしょうか?

テレワークを始める人たちが増えてきて仕事の仕方もかなり変わってきていると思います。せっかく満員電車の通勤から解放されたのに自宅での仕事がうまくいかないようでは事業に影響が出てしまう人もいるかと思います。

タスク管理をうまくやって効率よく仕事をこなし、自由になる時間を多く確保できればゆっくり過ごせる時間も増えてくると思います。

また、あくまで私がやっている方法の紹介なので、やってみてこういう方がやりやすい、とかあれば自由にカスタマイズしてみて欲しいですし、そういった情報があれば是非共有していただきたいです。

試行錯誤で進んでいる部分もあるテレワークですが、少しでも皆さんの役に立てば、と思いますので是非とも参考にしてもらえればと思います。

やはりお前らの禁則処理は間違っている【はてなブログ】

今年は元旦に1年間で600の記事を書くことを目標に掲げていました。ところが脱原発ならぬ「脱SNS」を試してみたりしてブログを休んだりしていたため600どころか平年の平均にすら届かない可能性も出てきました。

www.blog-tmp.tokyo

この度、海より深く反省し、思い立ったらすぐに記事を書き、予約投稿で翌日の朝6:00に投稿するなどという守りの姿勢ではなく、書き上げたらその場で投稿する攻めの姿勢をとることを決めました。

1日にいくつも記事を投稿する場合もありますが、なるべくその日の記事はリンクを貼ったり、複数の記事を投稿していることをわかるようにしますので、遡って見ていただけると嬉しいです。

www.blog-tmp.tokyo

ブログテーマ

ご存知の通り、当ブログはコロコロとテーマを変更しております。定期的に気が変わるのと、公式のサイトで新しいテーマとかまだ試していないのを見かけると試してみたくなります。本当に素敵なテーマがたくさんあるので片っ端から試したくなるので、これからも気がつけば違うサイトに来たのかと思うほど劇的に変わるかもしれません。

今のテーマは「マテリアルぽっぷ」

この記事を執筆している令和2年4月11日(土) 時点で使っているのは「マテリアルぽっぷ」というテーマです。


結構インパクトのあるテーマで、だいぶ前に見つけて適用してみたのです。しかし、致命的な問題があってすぐに違うテーマに戻していました。

禁則処理

ええ。簡単に言えば「。」とか「、」とかの句読点が文章の折り返しで行の先頭に来てしまうのです。一般的にワープロとか本とかでは「禁則処理」と言って、これらが先頭に来るときは少し手前から折り返しをします。

気にならない人は気にならないのかもしれませんが、私は文章を読んでいて句読点が行頭に来ているのは違和感を感じますし、自分のブログでそうなっているのは絶対に許せないです。

テーマによってマチマチ

はてなブログのテーマについては恐れ多くもタダで使わせていただいてるだけなのであまり文句は言えませんが、テーマによって禁則処理が適切だったり、まったくされなかったりとマチマチです。

すごく気に入ったデザインなのに禁則処理がされていなくて泣く泣く使うのをやめたテーマも結構あります。

鳴かぬなら鳴かせてしまえ?

私の職業は(自称)プログラマです。

禁則処理ができてないなら自分でやればいいんだ!

デザインセンスはありませんが、こうしたいというのがあればその機能を実現することはできます。禁則処理ができていなければやってしまえばいい、という境地にたどり着くまで2〜3年かかりました。

* {word-break: normal;}

パソコンでの設定が必要ですが、ブログの「ダッシュボード」から「デザイン」を選択して「カスタマイズ」から「デザインCSS」を選びます。そこに上の1行を貼り付けるだけです。

ちなみに厳密な禁則処理は「っ」とか「ー」も先頭にこないのが正しいのですが、今回の設定だとこの辺は対応できていない可能性があります。最低限の句読点だけはどうしても直したいので、手っ取り早くこれだけ入れました。

まとめ

めでたく「マテリアルぽっぷ」がデビューです。また気が変わるまでこのテーマでいきます。

hello, world

プログラムを勉強する時に最初にやる例題として有名なものに「Hello, World!」という文字を画面に表示させるプログラムがあります。

私が得意とするJava言語では以下のように書きます。

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

最近再開したDeep Learningでよく使うPythonだともっと簡単です。

print("Hello, World!")

私が2年前まで住んでいた島根県で話題のRubyだとさらに簡単です。

p "Hello, World!"

この歴史、調べてみると結構古くて、K&R本として有名な「プログラミング言語 C」が最初にやったとのこと。

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠

C言語ではこう書きます。

#include <stdio.h>

main()
{
    printf("hello, world\n");
}

この「プログラミング言語 C」は入門書としては少し難易度が高いですが、C言語のバイブルともいえる本です。プログラミングをやるなら一度は読みたい本です。私も過去何度も読みました。もうわかってることなのに読めば何か得るものがある、真の名著だと思います。

この本で初めて「Hello, World!」が使われたと言われておりますが、この時は上の例にも書いた通り全部小文字で感嘆符もなかったそうです。

hello, world

これが全ての始まりです。