エンジニア始めました

未経験、知識0からエンジニアになったらどうなるのか

H30 秋期 応用情報技術者試験

最近記事書けてません。

すんません。インプットばかりしてました。職場で手を動かして、お家で理論の理解をする毎日を過ごしてました。冬休みまでタスク山積みなので、冬休み中にはちゃんとしたの書きます。

あと、応用情報受かってました。

次はエンベデ受けます。

 

以上、よろしくお願いします。

ゼロから作るDeep Learning読んでます パート2

 今日は、第3章ニューラルネットワークからです。

www.oreilly.co.jp

第3章 ニューラルネットワーク

2章のパーセプトロンニューラルネットワークの違いは、活性化関数にあります。活性化関数入力を出力としてどのような基準にしたがって出すかを表したもので、その名の通りただの関数です。パーセプトロンでは、活性化関数はステップ関数でした。ステップ関数とは、ある値を越えると1,超えなければ0を返す関数です。

階段のようになっているので階段関数とも呼ばれます。

これは一番簡単な活性化関数になります。実際の活性化関数としてよく使われていたのは、シグモイド関数と呼ばれる関数です。

図を見れば分かるように、ステップ関数を滑らかにした形をしています。

最近ではReLU関数がよく使われているそうです。

この三つの活性化関数に共通しているのは、どれも非線形関数ということです。

何故、非線形関数なのか?理由は線形関数だとネットワークの層を増やしても意味がないからです。どんなに層を増やしても活性化関数が線形関数だと最後の層の線形関数が全体の活性化関数になってしまうので、結局一層のものと変わりが無くなります。

 

実装は自分でやってみてください。笑

あと、出力層(最終的な結果を出す層)では、回帰問題か分類問題かによって、恒等関数かソフトマックス関数を用います。恒等関数は出力層の出力そのままを返します。これは連続したものを求める時に使い、ソフトマックス関数は分類、不連続なものを求める時に用います。例えば、今日の気温から明日の気温を推測するときは恒等関数、写真に写っている人が男性か女性かを分類するときはソフトマックス関数。

ソフトマックス関数を用いると結果の総和が1の確率のような振る舞いをします。男性の出力が0.89で女性が0.11みたいな感じ、でもこれって結局恒等関数で用いた値が大きい順になるだけじゃんってことになります。それでもソフトマックス関数を用いるのには学習のフェーズに理由があるそうです。

ディープラーニングは基本、学習と推論のフェーズに分かれます。ヒントは重みってどうやって決めんの?ってとこにあります。

 

理論はかなり基本的なことになりますが、この本の良さは実装方法の丁寧さにあるかと思います。実装は実際に手を動かさないと意味がないので、ぜひ買って実装をしましょう!!笑

 

それでは(^^)/~~~

 

 

大企業のススメ

社会人1年目のひよっ子が感じた大企業の良いところ、悪いところ。

こんばんわ。最近技術系の記事を書くためのインプットの時間が足りてないです。すみません。今週中に一本書きます。自戒を込めて。

 

と言うことで、今年度入社のひよっ子新入社員が感じた大企業の良いところ、悪いところをだらだらと書いていこうと思います。少しでも、就活生の皆様のためになればと言うことで。(技術系社員の場合の話になります)

 

まずは、良いところから

 

1. いろんな働き方ができる

これは、すごく感じます。福利厚生とか労働基準法遵守とかが割ときちんとしてて、過度な残業、パワハラなどの理不尽なことは、見かけたことがありません。(私の周りでは)逆にどんなに仕事抱えててもスパッと定時で帰る人も多いです。そのような人をやる気のない人とすることはありません。ワークライフバランスと言うやつです。そのような人はライフを大事にしてる人なんだなと思うだけです。それは人それぞれの考え方なので否定する気にはなれませんし、誰も否定しません。と言う話を聞いて、ワークライフバランスなんか糞食らえ!ワークアズライフだろ!と息巻いている人にも悪い話ではありません。ライフを重視することが認められているということは、その人たちがやるべき仕事はやる気のある人にはバンバン振られます。もちろん残業代も出ます。何を重視するかによってバランス調整ができるところ。余裕のある大企業ならではの特権だと思います。

 

2. 様々な知識や経験が得られる

大企業では、なるべく一つの商品を最初から最後まで自社で作り上げます。なので、一つのチームにソフトウェアチーム、ハードウェアチーム、保守チーム、営業チーム、企画チームなどが一緒に一つのものを作り上げることになります。ソフトウェアの天才。ソフトウェアだけで食っていける。と言うような尖った人以外は、幅広い知識を武器にして働いていくしかありません。そのためには、様々なチームの人たちと共同で仕事ができると言うことはかなりプラスになります。ソフトウェアだけ作るような会社などではなかなかハードウェアの知識とか生産の知識とか得る機会は少ないのではと思います。

 

3. 基本的にはグローバル

大企業は日本だけでは仕事になりません。海外市場を常に意識しています。世界を相手に仕事ができる体力があるのも大企業ならではかと。自分は海外に興味はありませんが、海外が好きな人にはプラスかもしれません。

 

続いて、悪いところ

 

1. 意思決定が遅い

これはどうしようもないと考えていますが、それではダメなんだと思います。まだ、原因と改善策が自分の中でしっかりと固まっていません。漠然と遅いなとか面倒な手続きが多いなというのは感じますが、どう変えればトラブルなくスムーズに移行できるのかという方法を考えるのには時間がかかりそうです。しかし、課題であるのは確かです。

 

2. 人間関係のガチャ要素が強い

小さい会社と違って、部署ごとにかなりカラーが違います。飲み会大好き!息抜き大好き!しっかり働いてしっかり遊ぼう!みたいなカラーのところもあれば、仕事以外、飲み会などは年に数回、強要もしない。みたいなカラーのところもあります。それ自体は別にいいのですが、問題なのは配属されるまで自分の部署がどんなカラーなのか分からないということです。あまりプライベートまで介入されるのが嫌な人や、わいわいするのが好きな人が真逆のカラーのところに行ってしまうと、人間関係に不満が出てくることがあると思います。しかし、部署間移動もできるので周りで自分に合いそうなカラーの部署を見つけて、移動するのも手です。

 

おまけ

自分は就職するまでは、大企業はやりたい仕事するまでに何年も我慢しなきゃいけないのが嫌だとか思ってましたが、入ってみて気づいたのは、やりたいことをするために我慢するのではなく、やりたいことをするためにはそもそもそのぐらいの時間が必要ということです。技術、経験を積んでやりたいことがより洗練されていくのを感じています。同時に、まだ時間が必要だと思えるようになりました。大企業かベンチャーで悩んでいる人がいれば参考にしていただければと。

 

以上、優秀な人材をベンチャーから大企業に引きずり込みたいと思っている、平社員の戯言でした。

 

それでは(^^)/~~~

 

 

 

 

ゼロから作るDeep Learning 読んでます。 パート1

かなり久しぶりの更新になりましたが、サボってたのには理由があります。

仕事がかなり忙しかったです。

コーディング→バグる→ググる→直す→後出しで要件追加される→コーディング

の繰り返しで1日終わってる感じでした。

 

来週からはしっかりやっていきます。

早速、週末に読んだゼロから作るDeep Learningのまとめを

www.oreilly.co.jp

 

まずは、1章 Python入門 ですが飛ばします。笑

ここは自分でネットで調べて環境構築した方が後々いいと思うので、各々自分に合うサイトを見つけてやるってことで。(というか自分が説明できないだけ笑)

 

なので、2章 パーセプトロン からです。

 

2章 パーセプトロン

パーセプトロンとは、簡単に言うと多入力1出力のアルゴリズムのことです。様々な呼び方があるそうで、人工ニューロンや単純パーセプトロンと呼ばれているそうです。(自分は大学院時代マカロピッツモデルと呼んでました)

ディープラーニングの概要図(ニューラルネットワーク)でよく丸いのが線でたくさん繋がっているものを見かけると思いますが

f:id:oneandonly1:20181104235137p:plainこういうやつ

この丸と線で表されるアルゴリズムのことです。ちなみに丸はノードとかユニットとか呼んでます。線の部分は重みと呼ぶことが多いです。(グラフ理論知ってる人はリンクって呼ぶのかな?)

入力が入ってきて、出力を出すことはわかった。でどういう処理してんのってのが自然な流れです。数式を使うと簡単に表現できますが、なるべく使わない方向でいきます。まず、重みってのはノードへの入力のしやすさを表します。重み✖️入力が実際に入ってくる入力になります。(これは単純パーセプトロンの場合の表現かな、図のような多層になると出力✖️重みのが実際に入ってくる入力と考えた方が良いかも)

これでノードに入ってくる入力が決まりました。でノードではそれらの入力を足し算してその値が決められたある一定値を越えると出力を出す。というアルゴリズムになります。ある一定値のことを閾値と呼びます。

こんなもんです。結構単純です。でこいつら何ができんの?ってことです。

すごい単純なパターンを考えます。入力は1か0か、出力も1か0かとします。でノードは一つ、入力は二つとします。すると入力をA,B、出力をCとするとA,Bのパターンとしては(A,B)=(0,0),(1,0),(0,1),(1,1)の4パターン、Cは0か1の2パターンです。これは単純な論理回路として使えそうですよね。論理回路の説明はしませんが、ちょっとググれば分かると思います。で、このアルゴリズムいじれるパラメータは3つあります。Aの重み、Bの重み、ノードの閾値です。実はこのパラメータの組み合わせでANDゲートとNANDゲートとORゲートを作ることができます。3つのゲートが一つのアルゴリズムのパラメータをいじることで再現できるところに凄さがあります。一人三役できるってことです。

しかし、XORゲートは再現できません。線形と非線形の話になってきます。ここは図を見て理解した方が良いので本を読みましょう。(図描くのがめんどいだけ笑)なので、できない体で話を進めます。じゃあ、どうやったらXORゲートを表現できるの?ってとこですが、普通の論理回路でXORゲートを表現することを考えるとわかります。AND,OR,NANDの3つ素子を組み合わせて作ります。なので3つノードを用意すればいいのです。と言うことはノードからノードへ接続がある。イメージとしては直列につなぐ、そして何列になるかを層と言う言葉で表すと層を増やすと言う作業になります。一つ層を増やすだけで今までできなかったことができるようになりました。この時点で層を増やせばできることが増える感じがすると思います。これがディープの所以です。これを多層パーセプトロンと呼びます。図のやつは多層パーセプトロンです。(2層のパーセプトロン)

ってのが2章のまとめです。

最後に実装面での注意として今まで閾値というパラメータを使ってましたが、閾値を越えるかどうかの判断は入力の和から閾値の数値を引いたものが0を越えるかどうかで表すことができます。なので、この閾値の符合が逆になったものをバイアスと呼びます。このパラメータを使う方が実装が楽になります。

かなり適当に書いたので意味のわからないところが多いと思いますが、実際に本を読むとしっくりくると思います。わかりやすいので本当の初心者にはかなりおすすめです。が、ちょっと勉強してる人には完全に物足りない内容だと思います。

 

それでは(^^)/~~~

 

 

サル以下の人のGit躓きポイント

最近気づいたこと

Gitってリモートリポジトリとローカルリポジトリの2個しかないと思ってた。だから、コミットの必要性が理解できてなかった。

自分が変更したものは全てローカルリポジトリに勝手に適用されてると勘違いしてた。

 

イメージとしては

ローカルリポジトリは下書き置き場で、リモートリポジトリは清書置き場みたいな感じ

けど多分違う

ほんとは3行程あって

ワークスペースが下書き置き場、ローカルリポジトリが清書置き場、リモートリポジトリが完成版置き場みたいな感じ

そういう風に考えるとコミットの必要性が理解できた。自分みたいな初心者にはリモートリポジトリとローカルリポジトリの2つしかないっていう勘違いをする人がいるんじゃないかと思った。

 

 

多分いない笑

ていうかこの理解で合ってんのかも自信持って言えない。

指摘募集中です笑

 

最初はC!!じゃん拳C!!!!

まだ学生の頃

研究室の後輩に

「プログラミング始めようと思うんだけど言語は何から始めたらいい?」

という意識低い質問よくしていた

答えはいつも「C ++っすかね」だった

 

その時は、C ++?何それ?と思っていた

本屋に行っても目につくのはPythonjava PHPばかり、名前がカッコいいからという理由でPythonを始めた。

 

そして思ったのは

Matlabと同じじゃん」

プログラミングってこんなもんか

それから学ぶのをやめた

 

今はCをやっている

 

プログラミングってこんなこともできるのか!!

難しいけど楽しい!!

というか難しいから楽しい!!

 

毎日楽しくコードを書いてお金を貰ってる。

 

 

最初はC!!

 

 

H30 秋期 応用情報技術者試験を受けてきましたー(後編)

前回は実際に勉強始めて応用情報技術者試験を受けるまでを書いていきました。

 

今回は実際、基本情報技術者試験応用情報技術者試験(まだ合格してないけど笑)取ったら何が変わるの?ってことを書いていこうと思います。(対象としては基本情報は持っていて応用情報取れるかもぐらいになっている人間が感じていることですのでご参考までに笑)

 

まず、仕事関係

・先輩たちが話している言葉が宇宙語から人間が使う言語だと気づけるようになる。

基本情報を取れるぐらいの知識があれば、以前は聞いたこともない単語で行われていた先輩たちの会話が意味はよく分からないものの、聞いたことある単語ぐらいにはなります。

 

・仕事内容が大まかに分別できる様になる

それまでは、ITエンジニアってITの仕事するんでしょ?ってくらいの知識でした。ITの仕事がどの様に構成されているかが大まかにですがわかる様になります。例えば、野球って球投げて打つスポーツでしょ?って知識から、野球って外野とか内野とかポジションがあるんだくらいにはなります。

 

・実務は何もできない

基本情報持ってるからといってそれだけじゃ実務は何もできません。もう一度言います。実務は何もできません笑。これも野球で例えるとポジションが分かるぐらいの知識で、さあ野球やってみてって言われても何もできませんよね。なので過度な期待は持たない様に。

 

次に、資格としての価値

・エンジニアなのであれば価値はほとんどなし

ないです。もう一度言います。ないです笑。受験するまでの勉強した過程には価値はありますが資格としての価値はないです。運転免許や電気工事士みたいにこれを持っていれば持ってない人が禁じられていることができる様になるといった類の資格ではありません。なので、就職とか転職で有利とかないと思います(多分)。

 

・非エンジニアの場合

これは微妙ですね。正直よくわかりません。コンサルとか金融とかでITを専門としない様な人であれば、専門以外でも知識を広げようという姿勢が少しは評価されるかもしれません。

 

・価値はないけど努力は認められる

基本情報とか応用情報が人事評価に大きく関係するってことはないでしょう。でも、努力は認められると思います。会社によっては報奨金が出ます。自分の会社では3万円くらい出ます。

 

最後に

自分の周りの知り合には就職して1年くらい経って、会社からとるように命じられ、渋々勉強している人も見かけます。正直それは時間の無駄かなって思います。1年も実務している人がとるような資格ではないかと。1年目もしくは学生のうちに取っておく資格なのではないかと思います。

自分は、もし応用情報技術者試験に受かっていたら、来年の春期、秋期でそれぞれエンべデットシステムスペシャリストとネットワークスペシャリストを受けて資格試験はひとまず終えようかなと考えています。(他にもやりたいことがあるので間に合うかは不明。応用落ちてたらリベンジはします笑)

 

勉強方法とか、かかった時間とかを詳しく知りたい人はtwitterやコメントで連絡くださいー

特に知りたいことない人もtwiiterフォローしてくださいー笑

twitter: (@oneando36242486)