あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

2017年08月

7/31付けで、新卒から8年勤めた会社を退職しました。
その顛末などは別の機会に書くとして、今回は退職金と年金のお話を。

恥ずかしながら、今日の今日まで、退職金と年金についてほとんど何も理解していませんでした。
「まあ、明細がくるはずだから、それを見ればいいだろ」くらいに考えていたのです。
ところが、退職金・年金といっても色々な種類があるらしく、各所から五月雨で案内が来て困ってしまいました。
ちゃんと整理しないと、手続きの不備や貰い損ねが発生しかねないぞ、と。

そこで、本記事では、退職金と年金について整理します。
ググればいくらでも情報が出てきますが、一般的なメーカーを中途退職(してすぐに転職)したケースに限定して記載するので、同様の境遇の方にとっては参考になるのではないかと思います。

○年金・退職金の積み上げモデル
年金・退職金は一種類ではなく、国民全員が加入する(もらえる)基本的なものから、一部の人が加入する特殊なものまで、様々な種類があります。
それらを積み上げていくイメージで理解すると分かりやすいです。
年金・退職金の主な種類は以下の通り。

・国民年金
国民全員が加入する年金。転職先でも強制加入なので、気にすることは特に無いです。

・厚生年金
会社員が加入する年金。これも会社員なら強制加入なので、気にすることは無いです。

・企業年金
国民年金と厚生年金に加えて企業が独自に設ける年金。
企業独自の年金のため、退職後どうするかを選択して手続きをする必要があります。
主な選択肢は「一括でもらう(退職時に一時金として)」、「移管する」の2つ。
企業年金には主に確定給付年金と確定拠出年金があり(説明省略)、基本的には確定給付年金は「一括でもらう」、確定拠出年金は「移管する」ことになります。
年金・退職金で最も分かりにくいのが、確定給付年金を一括でもらう場合に、『年金として積み立てていたお金を退職金として、(後述する)退職一時金とは別に受け取る』ことになるという点だと思います。

・退職一時金
いわゆる退職金と言うとコレを指すことが多いのだと思います。
しかし、前述したように、退職一時金とは別に、確定給付年金として積み立てていたお金も退職時に受け取ることになります。

○結局どういう手続きをして、何が貰えんの?
退職手続きを普通にこなせば退職一時金を貰えます。
確定給付年金に関する手続きも基本的には退職手続きに含まれており、普通にこなせば退職金としてもらえるはずです(「一括でもらう」を選択した場合)。

以上です。

pix2pixではU-Netと呼ばれるネットワークを使用しています。
本記事では、下記サイトのchainer-pix2pixを参照しながら、chainerによるU-Netの実装方法を解説します。
https://github.com/pfnet-research/chainer-pix2pix

U-Netの概要については、下記論文の図1を参照してください。
U字ネットワークの左側の各層の出力を右側の各層の入力に連結するのが特徴です。
https://arxiv.org/abs/1505.04597

chainer-pix2pixからU-Netの実装を引用します。
class Encoder(chainer.Chain):
def __init__(self, in_ch):
layers = {}
w = chainer.initializers.Normal(0.02)
layers['c0'] = L.Convolution2D(in_ch, 64, 3, 1, 1, initialW=w)
layers['c1'] = CBR(64, 128, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
layers['c2'] = CBR(128, 256, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
layers['c3'] = CBR(256, 512, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
layers['c4'] = CBR(512, 512, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
layers['c5'] = CBR(512, 512, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
layers['c6'] = CBR(512, 512, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
layers['c7'] = CBR(512, 512, bn=True, sample='down', activation=F.leaky_relu, dropout=False)
super(Encoder, self).__init__(**layers)

def __call__(self, x):
hs = [F.leaky_relu(self.c0(x))]
for i in range(1,8):
hs.append(self['c%d'%i](hs[i-1]))
return hs

class Decoder(chainer.Chain):
def __init__(self, out_ch):
layers = {}
w = chainer.initializers.Normal(0.02)
layers['c0'] = CBR(512, 512, bn=True, sample='up', activation=F.relu, dropout=True)
layers['c1'] = CBR(1024, 512, bn=True, sample='up', activation=F.relu, dropout=True)
layers['c2'] = CBR(1024, 512, bn=True, sample='up', activation=F.relu, dropout=True)
layers['c3'] = CBR(1024, 512, bn=True, sample='up', activation=F.relu, dropout=False)
layers['c4'] = CBR(1024, 256, bn=True, sample='up', activation=F.relu, dropout=False)
layers['c5'] = CBR(512, 128, bn=True, sample='up', activation=F.relu, dropout=False)
layers['c6'] = CBR(256, 64, bn=True, sample='up', activation=F.relu, dropout=False)
layers['c7'] = L.Convolution2D(128, out_ch, 3, 1, 1, initialW=w)
super(Decoder, self).__init__(**layers)

def __call__(self, hs):
h = self.c0(hs[-1])
for i in range(1,8):
h = F.concat([h, hs[-i-1]])
if i<7:
h = self['c%d'%i](h)
else:
h = self.c7(h)
return h
EncoderとDecoderの2つ合わせてU-Netです。
Encoderの出力をDecoderに入力することでU字ネットワークを実現します。

特徴的なのは、Decoder.__call__()内で使用されているconcatという関数です。
これはVariable変数を結合する関数であり、これを用いてEncoder(U字左側)の各層の出力をDecoder(U字右側)の各層の入力に連結しています。

concat関数は連結する次元を引数axisで指定でき、デフォルト値は(0ではなく)1です。
Variable変数は(データ数, チャンネル数, 縦, 横)の4次元であるため、上記コードのようにaxisが指定されていない場合、axis=1つまり新しいチャンネルとしてEncoderの各層の出力を連結することになります。

以上がchainerでU-Netを実現する方法です。

↑このページのトップヘ