(57)【要約】【課題】リード電圧の推定の精度を向上させたメモリシステムを提供する。【解決手段】一つの実施形態によれば、複数のメモリセルと、メモリコントローラとを備える。メモリコントローラは、１以上の参照リード電圧を用いて複数のメモリセルに対するリードを行うことによってしきい値電圧に対するメモリセルの数を示すヒストグラムを取得する。そして、メモリコントローラは、ヒストグラムを、複数のメモリセルに格納されたデータをリードするための１以上の実リード電圧を出力する出力層を備えたトレーニング済みのニューラルネットワークモデルに入力する。そして、メモリコントローラは、出力層から出力された１以上の実リード電圧を用いて複数のメモリセルに対するリードを行う。【選択図】図６
2020144958.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセルと、
１以上の参照リード電圧を用いて前記複数のメモリセルに対するリードを行うことによってしきい値電圧に対するメモリセルの数を示すヒストグラムを取得し、前記ヒストグラムを、前記複数のメモリセルに格納されたデータをリードするための１以上の実リード電圧を出力する出力層を備えたトレーニング済みのニューラルネットワークモデルに入力し、前記出力層から出力された前記１以上の実リード電圧を用いて前記複数のメモリセルに対するリードを行う、メモリコントローラと、
を備えるメモリシステム。
【請求項２】
前記ニューラルネットワークモデルは、第１のノードと第２のノードとを備える入力層を備え、
前記メモリコントローラは、前記第１のノードに前記ヒストグラムを入力し、前記第２のノードに属性情報（property  information）を入力する、
請求項１に記載のメモリシステム。
【請求項３】
前記ニューラルネットワークモデルは、１以上の隠れ層をさらに備え、
前記１以上の隠れ層は、非線形活性化関数によって活性化される第３のノードを含む、
請求項２に記載のメモリシステム。
【請求項４】
前記１以上の参照リード電圧に含まれる参照リード電圧の数は、前記１以上の実リード電圧に含まれる実リード電圧の数より少ない、
請求項１に記載のメモリシステム。
【請求項５】
前記属性情報は、前記複数のメモリセルに対するプログラム／イレースサイクルの実行回数である、
請求項２に記載のメモリシステム。
【請求項６】
前記属性情報は、前記複数のメモリセルに対するリードの実行回数である、
請求項２に記載のメモリシステム。
【請求項７】
前記属性情報は、前記複数のメモリセルの位置情報である、
請求項２に記載のメモリシステム。
【請求項８】
温度センサをさらに備え、
前記属性情報は、前記温度センサの出力値である、
請求項２に記載のメモリシステム。
【請求項９】
前記属性情報は、前記複数のメモリセルにプログラムが実行されてからの経過時間である、
請求項２に記載のメモリシステム。
【請求項１０】
メモリシステムが備える複数のメモリセルに含まれる、しきい値電圧に対するメモリセルの数を示すヒストグラムと、前記複数のメモリセルに格納されたデータをリードするための１以上の実リード電圧と、を取得し、
前記ヒストグラムを入力データとして使用し、前記１以上の実リード電圧を正解データとして使用するトレーニングを、ニューラルネットワークモデルに対して実行する、
を含む方法。
【請求項１１】
属性情報をさらに取得するを含み、
前記入力データは、前記属性情報をさらに含む、
請求項１０に記載の方法。
【請求項１２】
前記ニューラルネットワークモデルは、１以上の隠れ層を備え、
前記１以上の隠れ層は、非線形活性化関数によって活性化されるノードを含む、
請求項１１に記載の方法。
【請求項１３】
前記ヒストグラムの各ビンを区切る電圧の数は、前記１以上の実リード電圧に含まれる実リード電圧の数よりも少ない、
請求項１０に記載の方法。
【請求項１４】
前記属性情報は、前記複数のメモリセルに対するプログラム／イレースサイクルの実行回数である、
請求項１１に記載の方法。
【請求項１５】
前記属性情報は、前記複数のメモリセルに対するリードの実行回数である、
請求項１１に記載の方法。
【請求項１６】
前記属性情報は、前記複数のメモリセルの位置情報である、
請求項１１に記載の方法。
【請求項１７】
前記属性情報は、温度センサの出力値である、
請求項１１に記載の方法。
【請求項１８】
前記属性情報は、前記複数のメモリセルにプログラムが実行されてからの経過時間である、
請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムおよび方法に関する。
【背景技術】
【０００２】
不揮発性のメモリセルを有するメモリシステムが知られている。そのようなメモリシステムにおいては、リード処理においては、メモリセルのしきい値電圧とリード電圧との比較に基づいて、そのメモリセルに保持されているデータが判定される。
【０００３】
メモリセルのしきい値電圧は、種々の要因によって変化し得る。メモリシステムは、メモリセルのしきい値電圧が変化したとしてもそのメモリセルから正しいデータを得ることができるように、リード電圧を変更することが可能に構成されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第９０６９６５９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一つの実施形態は、リード電圧の推定の精度を向上させたメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの実施形態によれば、複数のメモリセルと、メモリコントローラとを備える。メモリコントローラは、１以上の参照リード電圧を用いて複数のメモリセルに対するリードを行うことによってしきい値電圧に対するメモリセルの数を示すヒストグラムを取得する。そして、メモリコントローラは、ヒストグラムを、複数のメモリセルに格納されたデータをリードするための１以上の実リード電圧を出力する出力層を備えたトレーニング済みのニューラルネットワークモデルに入力する。そして、メモリコントローラは、出力層から出力された１以上の実リード電圧を用いて複数のメモリセルに対するリードを行う。
【図面の簡単な説明】
【０００７】
【図１】図１は、実施形態のメモリシステムの構成例を示す模式的な図である。
【図２】図２は、実施形態のメモリチップの構成例を示す模式的な図である。
【図３】図３は、実施形態のブロックＢＬＫの回路構成を示す模式的な図である。
【図４】図４は、実施形態のブロックＢＬＫの一部領域の断面図である。
【図５】図５は、実施形態のメモリセルのしきい値電圧の分布の例を示す模式的な図である。
【図６】図６は、実施形態のメモリコントローラが使用するトレーニング済みのニューラルネットワークモデルの構成の一例を示す模式的な図である。
【図７】図７は、実施形態の属性情報を示す模式的な図である。
【図８】図８は、実施形態のニューラルネットワークモデルのトレーニング環境の一例を示す模式的な図である。
【図９】図９は、実施形態のデータベースの構成の一例を示す模式的な図である。
【図１０】図１０は、実施形態のコンピュータにおいて実行される、ニューラルネットワークモデルのトレーニングの方法の一例を示すフローチャートである。
【図１１】図１１は、実施形態のメモリシステムにおいて実行される、実リード電圧を推定する動作の一例を示すフローチャートである。
【図１２】図１２は、実施形態のメモリコントローラが使用するトレーニング済みのニューラルネットワークモデルの構成の別の一例を示す模式的な図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよび方法を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【０００９】
（実施形態）
図１は、実施形態のメモリシステムの構成例を示す模式的な図である。メモリシステム１は、ホスト（Host）２と接続可能に構成されている。ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。
【００１０】
メモリシステム１は、ホスト２からアクセス要求（リード要求およびライト要求）を受け付けることができる。
【００１１】
メモリシステム１は、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）１００と、ホスト２とＮＡＮＤメモリ１００との間のデータ転送を実行するメモリコントローラ２００と、を備えている。
【００１２】
メモリコントローラ２００は、ホストインタフェース（Host  I/F）２０１と、ＲＡＭ（Random  Access  Memory）２０２と、ＣＰＵ（Central  Processing  Unit）２０３と、ＮＡＮＤＣ２０４と、ＥＣＣ（Error  Correction  Circuit）２０５と、温度センサ２０６と、を備える。
【００１３】
メモリコントローラ２００は、例えばＳｏＣ（System-On-a-Chip）として構成され得る。メモリコントローラ２００は、複数のチップによって構成されてもよい。メモリコントローラ２００は、ＣＰＵ２０３に代えて、ＦＰＧＡ（field-programmable  gate  array）やＡＳＩＣ（application  specific  integrated  circuit）を備えていてもよい。即ち、メモリコントローラ２００は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって構成され得る。
【００１４】
ＲＡＭ２０２は、バッファ、あるいはＣＰＵ２０３のワークエリアとして使用されるメモリである。ＲＡＭ２０２を構成するメモリの種類は、特定の種類に限定されない。例えば、ＲＡＭ２０２は、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＳＲＡＭ（Static  Random  Access  Memory）、またはこれらの組み合わせによって構成される。
【００１５】
ホストインタフェース２０１は、ホスト２との間の通信インタフェースの制御を実行する。ホストインタフェース２０１は、ＣＰＵ２０３による制御の下で、ホスト２とＲＡＭ２０２との間のデータ転送を実行する。ＮＡＮＤＣ２０４は、ＣＰＵ２０３による制御の下で、ＮＡＮＤメモリ１００とＲＡＭ２０２との間のデータ転送を実行したりする。
【００１６】
ＣＰＵ２０３は、ホストインタフェース２０１、ＲＡＭ２０２、ＮＡＮＤＣ２０４、およびＥＣＣ２０５を制御する。ＣＰＵ２０３は、ファームウェアプログラムを実行することによって、上記した各種構成要素の制御を実現する。
【００１７】
ＥＣＣ２０５は、ＮＡＮＤメモリ１００に送られるデータを符号化する。符号化は、誤り訂正符号による符号化である。ＥＣＣ２０５は、ＮＡＮＤメモリ１００から送られてきたデータに対し、復号化を実行し、それによって当該データに含まれるビットエラーの検出と訂正とを実施する。
【００１８】
ＥＣＣ２０５が使用する符号化の方式は、特定の方式に限定されない。一例では、符号化の方式として、ＬＤＰＣ（Low  Density  Parity  Check）が採用され得る。
【００１９】
温度センサ２０６は、メモリシステム１内の温度に対応した値を出力する。温度センサ２０６は、メモリコントローラ２００の外に設けられてもよい。温度センサ２０６は、４つのメモリチップ１０１のうちの一部の各々または全部の各々に内蔵されてもよい。温度センサ２０６は、４つのメモリチップ１０１のうちの一部の各々の近傍または全部の各々の近傍に搭載されてもよい。メモリシステム１が備える温度センサ２０６の数は、１つに限定されない。
【００２０】
ＮＡＮＤメモリ１００は、１以上のメモリチップ（Chip）１０１を含む。ここでは一例として、ＮＡＮＤメモリ１００は４つのメモリチップ１０１を含む。
【００２１】
図２は、実施形態のメモリチップ１０１の構成例を示す模式的な図である。図示するようにメモリチップ１０１は、周辺回路１１０およびメモリセルアレイ１１１を備える。
【００２２】
メモリセルアレイ１１１は、各々が複数の不揮発性メモリセルトランジスタの集合である複数のブロックＢＬＫ（ＢＬＫ０、ＢＬＫ１、…）を備える。ブロックＢＬＫの各々は、それぞれがワード線およびビット線に関連付けられたメモリセルトランジスタの集合である複数のストリングユニットＳＵ（ＳＵ０、ＳＵ１、…）を備える。ストリングユニットＳＵの各々は、メモリセルトランジスタが直列接続された複数のＮＡＮＤストリング１１４を備える。なお、ストリングユニットＳＵ内のＮＡＮＤストリング１１４の数は任意である。
【００２３】
周辺回路１１０は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。周辺回路１１０は、メモリコントローラ２００からコマンドを受信すると、メモリセルアレイ１１１に対し、プログラム処理、リード処理、およびイレース処理のうちの当該コマンドに対応した処理を実行する。
【００２４】
図３は、実施形態のブロックＢＬＫの回路構成を示す模式的な図である。なお、各ブロックＢＬＫは、同一の構成を有している。ブロックＢＬＫは、例えば４つのストリングユニットＳＵ０〜ＳＵ３を有する。各ストリングユニットＳＵは、複数のＮＡＮＤストリング１１４を含む。
【００２５】
ＮＡＮＤストリング１１４の各々は、例えば６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）および選択トランジスタＳＴ１、ＳＴ２を含んでいる。メモリセルトランジスタＭＴは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）は、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に直列接続されている。なお、メモリセルトランジスタＭＴは、電荷蓄積層に絶縁膜を用いたＭＯＮＯＳ型であってもよいし、電荷蓄積層に導電膜を用いたＦＧ型であってもよい。さらに、ＮＡＮＤストリング１１４内のメモリセルトランジスタＭＴの個数は６４個に限定されない。
【００２６】
ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ１のゲートは、それぞれ選択ゲート線ＳＧＤ０〜ＳＧＤ３に接続される。これに対してストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、例えば選択ゲート線ＳＧＳに共通接続される。ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、ストリングユニットＳＵ毎に異なる選択ゲート線ＳＧＳ０〜ＳＧＳ３に接続されてもよい。同一のブロックＢＬＫ内にあるメモリセルトランジスタＭＴ０〜ＭＴ６３の制御ゲートは、それぞれワード線ＷＬ０〜ＷＬ６３に共通接続される。
【００２７】
ストリングユニットＳＵ内にある各ＮＡＮＤストリング１１４の選択トランジスタＳＴ１のドレインは、それぞれ異なるビット線ＢＬ（ＢＬ０〜ＢＬ（Ｌ−１）、但しＬは２以上の自然数）に接続される。また、ビット線ＢＬは、複数のブロックＢＬＫ間で各ストリングユニットＳＵ内にある１つのＮＡＮＤストリング１１４を共通に接続する。更に、各選択トランジスタＳＴ２のソースは、ソース線ＳＬに共通に接続されている。
【００２８】
つまりストリングユニットＳＵは、異なるビット線ＢＬに接続され、且つ同一の選択ゲート線ＳＧＤに接続されたＮＡＮＤストリング１１４の集合である。またブロックＢＬＫは、ワード線ＷＬを共通にする複数のストリングユニットＳＵの集合である。そしてメモリセルアレイ１１１は、ビット線ＢＬを共通にする複数のブロックＢＬＫの集合である。
【００２９】
周辺回路１１０によるプログラム処理およびリード処理は、１つのストリングユニットＳＵにおける１つのワード線ＷＬに接続されたメモリセルトランジスタＭＴに対して、一括して実行され得る。１つのストリングユニットＳＵにおける１つのワード線ＷＬに対してプログラム処理またはリード処理が実行され得る１ビットのデータの集まりを「ページ」と表記する。
【００３０】
周辺回路１１０によるイレース処理は、ブロックＢＬＫ単位で実行される。即ち、１つのブロックＢＬＫに格納された全てのデータは、一括にイレースされる。
【００３１】
図４は、実施形態のブロックＢＬＫの一部領域の断面図である。本図に示されるように、ｐ型のウェル領域（半導体基板）１０上に、複数のＮＡＮＤストリング１１４が形成されている。すなわち、ウェル領域１０上には、選択ゲート線ＳＧＳとして機能する例えば４層の配線層１１、ワード線ＷＬ０〜ＷＬ６３として機能する６４層の配線層１２、および選択ゲート線ＳＧＤとして機能する例えば４層の配線層１３が、順次積層されている。積層された配線層間には、図示せぬ絶縁膜が形成されている。
【００３２】
そして、これらの配線層１３、１２、１１を貫通してウェル領域１０に達するピラー状の導電体１４が形成されている。導電体１４の側面には、ゲート絶縁膜１５、電荷蓄積層（絶縁膜または導電膜）１６、およびブロック絶縁膜１７が順次形成され、これらによってメモリセルトランジスタＭＴ、並びに選択トランジスタＳＴ１およびＳＴ２が形成されている。導電体１４は、ＮＡＮＤストリング１１４の電流経路として機能し、各トランジスタのチャネルが形成される領域となる。そして導電体１４の上端は、ビット線ＢＬとして機能する金属配線層１８に接続される。
【００３３】
ウェル領域１０の表面領域内には、ｎ＋型不純物拡散層１９が形成されている。拡散層１９上にはコンタクトプラグ２０が形成され、コンタクトプラグ２０は、ソース線ＳＬとして機能する金属配線層２１に接続される。更に、ウェル領域１０の表面領域内には、ｐ＋型不純物拡散層２２が形成されている。拡散層２２上にはコンタクトプラグ２３が形成され、コンタクトプラグ２３は、ウェル配線ＣＰＷＥＬＬとして機能する金属配線層２４に接続される。ウェル配線ＣＰＷＥＬＬは、ウェル領域１０を介して導電体１４に電位を印加するための配線である。
【００３４】
以上の構成が、半導体基板に平行な第２方向Ｄ２に複数配列されており、第２方向Ｄ２に並ぶ複数のＮＡＮＤストリング１１４の集合によってストリングユニットＳＵが形成される。
【００３５】
なお、図２〜４に示された構成は一例である。メモリセルアレイ１１１の構成は、上記した構成に制限されない。例えば、メモリセルアレイ１１１は、ＮＡＮＤストリング１１４が２次元的に配列された構成を有していてもよい。
【００３６】
以降では、メモリセルトランジスタＭＴを、単に、メモリセルと表記する。
【００３７】
図５は、実施形態のメモリセルのしきい値電圧の分布の例を示す模式的な図である。図５に含まれる３つのグラフにおいて、縦軸は、メモリセルの数（ビットカウント）を示しており、横軸は、しきい値電圧（Ｖｔｈ）を示している。なお、以降に説明される例では、特に断りがない限り、各メモリセルにデータを保持する方式として、ＴＬＣ（Ｔｒｉｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）と呼ばれる方式が適用されていることとしている。ＴＬＣの方式によれば、各メモリセルは、３ビットのデータを保持することができる。
【００３８】
ＴＬＣの場合、しきい値電圧の取り得る範囲は、８つの範囲に区分される。この８つの区分を、しきい値電圧が低いほうから順に、“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステートと呼ぶことにする。各メモリセルのしきい値電圧は、プログラム処理の際に、周辺回路１１０によって、“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに属するように、制御される。
【００３９】
その結果、しきい値電圧に対するメモリセルの数をプロットした場合、メモリセルのしきい値電圧の分布は、図５の（Ａ）に示されるように、それぞれ異なるステートに属する８つのローブを形成する。
【００４０】
８つのステートは、それぞれ異なる３ビットのデータに対応する。一例では、“Ｅｒ”ステートは“１１１”に対応し、“Ａ”ステートは“１１０”に対応し、“Ｂ”ステートは“１００”に対応し、“Ｃ”ステートは“０００”に対応し、“Ｄ”ステートは“０１０”に対応し、“Ｅ”ステートは“０１１”に対応し、“Ｆ”ステートは“００１”に対応し、“Ｇ”ステートは“１０１”に対応する。このように、各メモリセルは、そのしきい値電圧が属するステートに対応したデータを保持することができる。
【００４１】
なお、１つのメモリセルに保持される３ビットのデータの各桁は、位置に対応した名称で表記される。例えばＬＳＢ（Least  Significant  Bit）はロアービット、ＭＳＢ（Most  Significant  Bit）はアッパービット、ＬＳＢとＭＳＢとの間のビットはミドルビット、と称される。
【００４２】
しきい値電圧は、イレース処理によって“Ｅｒ”ステートまで低下せしめられる。また、しきい値電圧は、プログラム処理によって、“Ｅｒ”ステートに維持されるか、または“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに至るまで、上昇せしめられる。
【００４３】
隣接する２つのステートの境界には、データの判定のための電圧が設定される。この電圧を、後述する参照リード電圧（reference  read  voltage）と区別するために、実リード電圧（actual  read  voltage）、と表記する。
【００４４】
例えば、図５の（Ａ）に例示されるように、“Ｅｒ”ステートと“Ａ”ステートとの間に実リード電圧Ｖａが設定され、“Ａ”ステートと“Ｂ”ステートとの間に実リード電圧Ｖｂが設定され、“Ｂ”ステートと“Ｃ”ステートとの間に実リード電圧Ｖｃが設定され、“Ｃ”ステートと“Ｄ”ステートとの間に実リード電圧Ｖｄが設定され、“Ｄ”ステートと“Ｅ”ステートとの間に実リード電圧Ｖｅが設定され、“Ｅ”ステートと“Ｆ”ステートとの間に実リード電圧Ｖｆが設定され、“Ｆ”ステートと“Ｇ”ステートとの間に実リード電圧Ｖｇが設定される。つまり、８つのステートが設定されるＴＬＣモードでは、７点の実リード電圧が設定される。リード処理においては、周辺回路１１０は、複数点の実リード電圧を用いてメモリセルが属するステートを特定し、特定したステートをデータにデコードする。
【００４５】
ここで、メモリセルのしきい値電圧は、種々の要因によって変化し得る。しきい値電圧のローブの一部または全部がステート間の境界にある実リード電圧を越えた場合、データの誤判定が発生する。即ち、プログラム処理時と異なった値が読み出される。プログラム処理時と異なった値を、ビットエラーと表記する。
【００４６】
メモリコントローラ２００は、ビットエラーに対し、ＥＣＣ２０５によるエラー訂正と、実リード電圧のシフトと、で対処することができる。
【００４７】
例えば、メモリコントローラ２００は、ＮＡＮＤメモリ１００から取得したデータに対してＥＣＣ２０５を用いたエラー訂正を実行する。エラー訂正に失敗した場合、メモリコントローラ２００は、実リード電圧Ｖａ〜Ｖｇの最適値を推定し、推定によって得られた実リード電圧Ｖａ〜Ｖｇの最適値を実リード電圧Ｖａ〜Ｖｇの新たな設定値として設定してリード処理をリトライする。
【００４８】
実リード電圧Ｖａ〜Ｖｇの最適値は、ビットエラーの発生率を出来るだけ小さくすることができる実リード電圧Ｖａ〜Ｖｇの値をいう。
【００４９】
図５の（Ｂ）は、図５の（Ａ）に示される分布が得られてからしばらくの間、メモリシステム１が使用された後に得られる、しきい値電圧の分布を示している。本図に示されるように、それぞれ異なるステートに対応する８つのローブは、図５の（Ａ）に示される８つのローブとは形状および位置が異なっている。８つのローブの裾野が重なり合って、１つの連続した分布が形成されている。このような分布が得られた場合、当該分布が有する７つの極小点を実リード電圧Ｖａ〜Ｖｇとして設定すれば、ビットエラーの発生率を最小にすることが可能と考えられる。即ち、Ｖａ＿ｏｐｔ，Ｖｂ＿ｏｐｔ，Ｖｃ＿ｏｐｔ，Ｖｄ＿ｏｐｔ，Ｖｅ＿ｏｐｔ，Ｖｆ＿ｏｐｔ，Ｖｇ＿ｏｐｔが、図５の（Ｂ）の状態の分布における実リード電圧Ｖａ〜Ｖｇの最適値に該当する。
【００５０】
なお、実リード電圧Ｖａ〜Ｖｇの最適値は、必ずしも当該分布が有する極小点、例えばビットエラーの発生率を最小にするための値、でなくてもよい。
【００５１】
本実施形態および後述する実施形態では、メモリコントローラ２００は、トレーニング済みのニューラルネットワークモデルを用いることによって実リード電圧Ｖａ〜Ｖｇの最適値を推定する。
【００５２】
具体的には、メモリコントローラ２００は、予め決められた１点以上の参照リード電圧を用いてリードを実行することによって、しきい値電圧に対するメモリセルの数を示すヒストグラムを取得して、取得したヒストグラムを、トレーニング済みのニューラルネットワークモデルに入力する。当該ニューラルネットワークモデルは、実リード電圧Ｖａ〜Ｖｇを出力する出力層を備える。メモリコントローラ２００は、ニューラルネットワークモデルの出力層から出力された実リード電圧Ｖａ〜Ｖｇを、データを判定するための実際のリード電圧、つまり実リード電圧として用いて、リードを実行する。
【００５３】
図５の（Ｂ）の例では、７点の参照リード電圧Ｖｒ１，Ｖｒ２，Ｖｒ３，Ｖｒ４，Ｖｒ５，Ｖｒ６，Ｖｒ７が予め設定されている。
【００５４】
ワード線に参照リード電圧Ｖｒｉ（ただしｉは１から７までの整数）を印加した場合、当該ワード線に接続されたメモリセルの群のうち、しきい値電圧がＶｒｉより低いメモリセルは、オン状態となり、しきい値電圧がＶｒｉより高いメモリセルは、オフ状態となる。メモリセルがオン状態であるかオフ状態であるかは、周辺回路１１０が備えるセンスアンプによって判定される。
【００５５】
メモリコントローラ２００は、周辺回路１１０に、対象のワード線に参照リード電圧Ｖｒ１，Ｖｒ２，Ｖｒ３，Ｖｒ４，Ｖｒ５，Ｖｒ６，Ｖｒ７を順次印加させて、参照リード電圧毎に各メモリセルがオン状態であるかオフ状態であるかを判定させる。メモリコントローラ２００は、参照リード電圧毎に、対象のワード線に接続された複数のメモリセルのうちの、オン状態およびオフ状態のうちの予め決められた状態のメモリセルの数をカウントする。そして、メモリコントローラ２００は、参照リード電圧毎に得られたカウント値に基づいて、参照リード電圧Ｖｒ１，Ｖｒ２，Ｖｒ３，Ｖｒ４，Ｖｒ５，Ｖｒ６，Ｖｒ７によって区切られた８つの区間をビンとし、メモリセルの数を度数とするヒストグラムを生成する。
【００５６】
例えば、参照リード電圧Ｖｒｉが印加された場合のオン状態のメモリセルの数をＣｉと表記し、対象のワード線に接続されたメモリセルの数をＣｍｔと表記すると、ＶｒｊとＶｒ（ｊ＋１）とによって区切られた区間の度数は、Ｃ（ｊ＋１）−Ｃｊの演算によって得ることができる。ただし、ｊは１から６までの整数である。Ｖｒ１より小さい区間の度数は、Ｃ１とされる。Ｖｒ７より大きい区間の度数は、Ｃｍｔ−Ｃ７とされる。
【００５７】
図５の（Ｃ）は、上記の処理によって得られたヒストグラムを示す模式図である。
【００５８】
なお、参照リード電圧Ｖｒ１〜Ｖｒ７は、予め設定されている。参照リード電圧Ｖｒ１〜Ｖｒ７の設定方法は、特定の方法に限定されない。
【００５９】
例えば、７つの実リード電圧Ｖａ〜Ｖｇのそれぞれの初期値が予め決められており、メモリコントローラ２００は、各実リード電圧の初期値からの差分を用いて周辺回路１１０に各実リード電圧を設定する場合がある。そのような場合においては、７つの実リード電圧Ｖａ〜Ｖｇの初期値が７つの参照リード電圧Ｖｒ１〜Ｖｒ７として使用されてもよい。
【００６０】
なお、参照リード電圧Ｖｒ１〜Ｖｒ７は、トレーニングにおいて入力データとして使用されるヒストグラムを得るために使用された参照リード電圧と等しい。
【００６１】
また、図５の例では、参照リード電圧の数は、実リード電圧の数と等しい。参照リード電圧の数は、実リード電圧の数と異なっていてもよい。例えば、参照リード電圧の数が３つであり、メモリコントローラ２００は、当該３つの参照リード電圧を用いて４つのビンを有するヒストグラムを生成してもよい。
【００６２】
図６は、実施形態のメモリコントローラ２００が使用するトレーニング済みのニューラルネットワークモデル３００の構成の一例を示す模式的な図である。
【００６３】
ニューラルネットワークモデル３００は、１つの隠れ層を有する多層パーセプトロン（Multi-Layer  Perceptron  :  MLP）の構成を有している。ニューラルネットワークモデル３００は、全結合のMLP（fully  connected  MLP）であってもよいし、非全結合のMLP（sparsely  connected  MLP）であってもよい。隠れ層で使用される活性化関数は、例えばＲｅＬＵ（Rectified  Linear  Units）関数であり、出力層で使用される活性化関数は、例えば線形関数である。
【００６４】
図６の例では、入力層に入力されるデータは、ヒストグラムと、属性情報とを含む。入力層は、ヒストグラムが入力されるノードとして、ヒストグラムが備えるビンの数に対応した数（即ち８個）のノードを備える。また、入力層は、属性情報が入力されるノードとして、属性情報の数に対応した数（ここでは１個）のノードを備える。
【００６５】
出力層は、実リード電圧Ｖａ〜Ｖｇの数に対応した数（即ち７個）のノードを備える。隠れ層は、１以上のノードによって構成される。図６の例では、隠れ層は１５個のノードを備える。
【００６６】
隠れ層および出力層では、各ノードは、バイアスおよび前の層のノードからの各入力値に対して重みを乗じ、重みが乗じられた後の各値の総和に対して活性化関数を適用し、活性化関数の適用によって得られた値を出力する。
【００６７】
各重みは、トレーニングによって予め決定されている。つまり、ニューラルネットワークモデル３００は、ヒストグラムおよび属性情報を含む入力データを実リード電圧Ｖａ〜Ｖｇの最適値にマップするように予めトレーニングされている。
【００６８】
図７は、実施形態の属性情報を示す模式的な図である。
属性情報は、例えば、メモリコントローラ２００の使用の状況に関する情報を含む。メモリコントローラ２００の使用の状況に関する情報は、例えば、プログラム／イレースサイクルの実行回数、リードの実行回数、プログラムが実行されてからの経過時間、温度情報、などである。
【００６９】
プログラム／イレースサイクルは、空のブロックＢＬＫに対する初回の書き込みから当該ブロックＢＬＫ内のデータのイレースまでのプロセスをいう。プログラム／イレースサイクルの実行回数が増加するほど、しきい値電圧が変化しやすくなる。よって、プログラム／イレースサイクルをニューラルネットワークモデル３００の入力データに含めることによって、プログラム／イレースサイクルの実行回数に起因するしきい値電圧の変化を考慮した推定が可能となる。
【００７０】
また、メモリセルに格納されたデータが多数回、リードされると、当該メモリセルまたは当該メモリセルの近傍のメモリセルのしきい値電圧が変化し得る。この現象は、リードディスターブとして知られている。リードの実行回数をニューラルネットワークモデル３００の入力データに含めることによって、リードディスターブを考慮した推定が可能となる。
【００７１】
また、メモリセルのしきい値電圧は、時間の経過とともに低下する傾向がある。プログラムが実行されてからの経過時間をニューラルネットワークモデル３００の入力データに含めることによって、時間の経過によるしきい値電圧の低下を考慮した推定が可能となる。
【００７２】
また、メモリセルの特性、例えば時間経過によるしきい値電圧の低下の速度は、メモリセルの温度に応じて変化する。温度情報をニューラルネットワークモデル３００の入力データに含めることによって、温度に応じたメモリセルの特性の違いを考慮した推定が可能となる。
【００７３】
なお、ニューラルネットワークモデル３００に入力される温度情報は、ＮＡＮＤメモリ１００へのプログラム時における温度情報であってもよいし、ＮＡＮＤメモリ１００からのリード時における温度情報であってもよいし、プログラム時における温度情報およびリード時における温度情報の対であってもよい。つまり、ニューラルネットワークモデル３００に入力される温度情報としては、任意のタイミングで取得された温度情報が使用され得る。
【００７４】
また、属性情報は、メモリセルの位置に関する情報であってもよい。メモリセルの位置に関する情報は、例えばワード線番号である。
【００７５】
メモリセルアレイ１１１が図２〜４に例示されたような３次元構成を有する場合、メモリセルアレイ１１１は、例えば次のように製造される。即ち、まず、多数の配線層１１、１２、１３が積層される。その後、これらの配線層１１、１２、１３を貫通する孔がドライエッチングなどによって形成され、その孔にピラー状の導電体１４などが形成される。
【００７６】
ここで、孔の径を深さ方向のどの位置でも一定とすることは難しい。孔は、例えば、深さ方向の位置に応じて拡径したり縮径したりする傾向がある。これによって、各メモリセルの特性は、深さ方向の位置毎に、つまりワード線の位置毎に、異なる場合がある。
【００７７】
ワード線番号をニューラルネットワークモデル３００の入力データに含めることによって、ワード線の位置毎のメモリセルの特性の違いを考慮した推定が可能となる。
【００７８】
一般に、線形回帰モデルによれば、ヒストグラムおよび属性情報のように複数種類の入力データから実リード電圧Ｖａ〜Ｖｇの最適値を高精度に推定することが困難である。
【００７９】
実施形態によれば、ニューラルネットワークモデル３００は、非線形活性化関数によって活性化される隠れ層を備えた多層パーセプトロンによって構成されている。この構成により、ニューラルネットワークモデル３００は、非線形回帰モデルとして機能する。ニューラルネットワークモデル３００は、非線形回帰によって、ヒストグラムと属性情報とを含む入力データを、実リード電圧Ｖａ〜Ｖｇの最適値に、高い精度で対応付けることができる。つまり、メモリコントローラ２００は、ニューラルネットワークモデル３００を用いることによって、実リード電圧Ｖａ〜Ｖｇの最適値を高精度に推定することが可能である。
【００８０】
また、ニューラルネットワークモデル３００の入力データに属性情報を含めることによって、メモリシステム１の使用の状況が異なる種々のケースにおいて実リード電圧の最適値を高精度に推定することが可能となる。
【００８１】
なお、入力層が備える属性情報の入力用のノードの数は、２以上であってもよい。つまり、入力層は、それぞれ異なる種類の属性情報が入力される２以上のノードを備え得る。
【００８２】
また、入力層が備えるヒストグラムの入力用のノードの数は８に限定されない。入力層が備えるヒストグラムの入力用のノードの数は、入力されるヒストグラムのビンの数に応じて変更され得る。
【００８３】
また、隠れ層で使用される活性化関数は、ＲｅＬＵ関数に限定されない。隠れ層で使用される活性化関数として、シグモイド関数などを含む任意の非線形活性化関数を利用することができる。
【００８４】
また、ニューラルネットワークモデル３００が備える隠れ層の数は、１つに限定されない。ニューラルネットワークモデル３００が備える隠れ層の数は、２以上であってもよい。
【００８５】
上述したニューラルネットワークモデル３００の構成は、モデル情報２０７に記録されている。モデル情報２０７は、例えば、複数のノードの定義と、ノード間の接続関係の定義と、バイアスと、を含む。モデル情報２０７では、各ノードには、活性化関数とトレーニング済みの重みが関連付けられている。
【００８６】
モデル情報２０７は、例えばＮＡＮＤメモリ１００内の所定の位置に予め格納されている。メモリシステム１の起動時には、ＣＰＵ２０３は、モデル情報２０７をＲＡＭ２０２にロードする。そして、ＣＰＵ２０３は、ＲＡＭ２０２にロードされたモデル情報２０７に基づいて、各ノードに関連付けられた重み、バイアス、活性化関数に基づく計算を行うことによって、ニューラルネットワークモデル３００としての計算を実現する。
【００８７】
なお、ニューラルネットワークモデル３００は、ＣＰＵ２０３に替えて、専用のハードウェア回路によって実現することも可能である。例えば、レジスタ、乗算器、および加算器を備えるプロセッサユニットの群によってニューラルネットワークモデル３００が構成されてもよい。各プロセッサユニットが、ニューラルネットワークモデル３００の各ノードと同様の接続関係で相互に接続され、各プロセッサユニットのレジスタには、トレーニング済みの重みが格納されることで、プロセッサユニットの群をニューラルネットワークモデル３００として機能させることが可能である。
【００８８】
ＣＰＵ２０３は、ニューラルネットワークモデル３００としての計算によって得られた実リード電圧の計算値を電圧情報２０８に実リード電圧の設定値として記録する。ＣＰＵ２０３は、ＮＡＮＤメモリ１００に対してデータのリードを行う際には、電圧情報２０８に記録された実リード電圧の設定値を使用する。
【００８９】
なお、電圧情報２０８には、実リード電圧が、所定の単位領域毎に記録される。単位領域は、例えばブロックＢＬＫである。つまり、１つのブロックＢＬＫに含まれる全てのメモリセルに対し、共通する実リード電圧が使用される。なお、単位領域はブロックＢＬＫに限定されない。例えば、単位領域はワード線などであってもよい。
【００９０】
また、図１の例では、電圧情報２０８はＲＡＭ２０２に格納されている。例えば、電圧情報２０８は、メモリシステム１の電源断の前には、ＲＡＭ２０２からＮＡＮＤメモリ１００に退避される。メモリシステム１の起動後には、ＮＡＮＤメモリ１００からＲＡＭ２０２にロードされる。なお、電圧情報２０８は、ＮＡＮＤメモリ１００に退避されなくてもよい。また、電圧情報２０８が格納される位置はＲＡＭ２０２に限定されない。
【００９１】
上記したニューラルネットワークモデル３００は、予めトレーニングされている。
図８は、実施形態のニューラルネットワークモデル３００のトレーニング環境の一例を示す模式的な図である。
【００９２】
図８に示されるように、ニューラルネットワークモデル３００のトレーニングは、ＣＰＵ４０１と、メモリ４０２と、を備えたコンピュータ４００において実行される。
【００９３】
メモリ４０２は、揮発性メモリ、不揮発性メモリ、またはそれらの組み合わせによって構成される。メモリ４０２には、モデル情報４０３と、データベース４０４と、が予め格納される。
【００９４】
データベース４０４には、それぞれ正解データが対応付けられた多数のトレーニングデータが記録されている。
【００９５】
図９は、実施形態のデータベース４０４の構成の一例を示す模式的な図である。データベース４０４は、複数のレコードを備える。各レコードには、ヒストグラムと、属性情報と、実リード電圧の最適値と、が格納される。トレーニングでは、各レコードに格納されているこれらの情報のうちの、ヒストグラムおよび属性情報は、入力データとして使用され、実リード電圧の最適値は、正解データとして使用される。
【００９６】
各レコードの内容は、メモリチップ１０１の１以上のサンプル品などから予め取得されたものである。例えば、メモリチップ１０１の１以上のサンプル品が試験装置に接続され、試験装置は、メモリシステム１の実際の使用を模擬した試験を実施する。つまり、試験装置は、各サンプル品に対して実際の使用で想定される種々のコマンドを種々のパターンで送信する。試験装置は、各サンプル品の周囲の温度を変化させてもよい。
【００９７】
試験では、アクセスのパターンや環境温度を異ならせることで、各サンプル品は、プログラム／イレースサイクルの実行回数、リードの実行回数、プログラムされてからの経過時間、または使用時の温度、などの点で異なる状態にされる。試験装置は、各状態においてヒストグラムを取得する。
【００９８】
つまり、試験装置は、サンプル品が備える周辺回路１１０に、対象のワード線に参照リード電圧Ｖｒ１，Ｖｒ２，Ｖｒ３，Ｖｒ４，Ｖｒ５，Ｖｒ６，Ｖｒ７を順次印加させて、参照リード電圧毎に各メモリセルがオン状態であるかオフ状態であるかを判定させる。試験装置は、参照リード電圧毎に、対象のワード線に接続された複数のメモリセルのうちの、オン状態およびオフ状態のうちの予め決められた状態のメモリセルの数をカウントする。そして、試験装置は、参照リード電圧毎に得られたカウント値に基づいて、参照リード電圧Ｖｒ１，Ｖｒ２，Ｖｒ３，Ｖｒ４，Ｖｒ５，Ｖｒ６，Ｖｒ７によって区切られた８つの区間をビンとし、メモリセルの数を度数とするヒストグラムを生成する。
【００９９】
試験装置は、サンプル品からヒストグラムを取得する際に、実リード電圧の最適値を取得する。実リード電圧の最適値の取得方法は、特定の方法に限定されない。実リード電圧の最適値は、例えば、ディストリビューションリードを実行することによって得ることができる。ディストリビューションリードとは、ワード線に印加される電圧を所定の刻み幅ごとにシフトさせながら当該ワード線に接続された、オン状態のメモリセルの数またはオフ状態のメモリセルの数を観測することによって、例えば図５の（Ｂ）に示されるようなメモリセルのしきい値電圧の分布を測定する動作をいう。試験装置は、ディストリビューションリードによって得られたメモリセルのしきい値電圧の分布から、７つの極小点を特定し、特定された７つの極小点を実リード電圧の最適値として取得する。なお、実リード電圧の最適値の取得方法はこれに限定されない。
【０１００】
試験装置は、ヒストグラムと、ヒストグラムを取得した際に取得した実リード電圧の最適値とを出力する。また、試験装置は、ヒストグラムを取得した際に、プログラム／イレースサイクルの実行回数、リードの実行回数、プログラムされてからの経過時間、温度、またはヒストグラムが取得されたワード線を示すワード線番号を、属性情報として出力する。データベース４０４の１つのレコードには、試験装置から出力された属性情報、ヒストグラム、および実リード電圧の最適値が記録される。
【０１０１】
なお、データベース４０４を構築する方法は上記の方法に限定されない。属性情報、ヒストグラム、および実リード電圧の最適値のうちの一部または全部は、シミュレーションによって取得されてもよい。また、種々の条件で使用された１以上のメモリシステムが用意され、当該１以上のメモリシステムから属性情報、ヒストグラム、および実リード電圧の最適値のうちの一部または全部が取得されてもよい。
【０１０２】
図８に説明を戻す。
モデル情報４０３は、トレーニングが完了する前のニューラルネットワークモデル３００の構成が記録された情報である。モデル情報４０３は、例えば、モデル情報２０７と同様のデータ構造を有している。ただし、トレーニングの開始の前では、各重みには初期値が設定されている。
【０１０３】
ＣＰＵ４０１は、モデル情報４０３に基づいて、各ノードに関連付けられた重み、バイアス、活性化関数に基づく計算を行うことによって、ニューラルネットワークモデルとしての計算を実現する。ＣＰＵ４０１は、モデル情報４０３に基づくニューラルネットワークモデルに対し、各レコードに格納された属性情報およびヒストグラムを入力データとして使用し、入力データと同一のレコードに格納された実リード電圧の最適値を正解データとして使用するトレーニングを実行する。これによって、最適化されたニューラルネットワークモデル、即ちニューラルネットワークモデル３００が生成される。
【０１０４】
図１０は、実施形態のコンピュータ４００において実行される、ニューラルネットワークモデルのトレーニングの方法の一例を示すフローチャートである。なお、本図の例では、ミニバッチトレーニングが適用されている。つまり、データベース４０４に含まれる全レコードが、レコードの数がほぼ等しい複数のグループ（ミニバッチ）に分割され、ミニバッチ毎に損失関数（loss  function）が演算される。トレーニングの方法としては、ミニバッチトレーニングに替えて、バッチトレーニングまたはオンライントレーニングが適用されてもよい。
【０１０５】
図１０に示されるように、まず、ＣＰＵ４０１は、データベース４０４に含まれる全レコードを、複数のミニバッチに分割する（Ｓ１０１）。Ｓ１０１では、ＣＰＵ４０１は、各ミニバッチに含めるレコードをできるだけランダムに選択する。
【０１０６】
そして、ＣＰＵ４０１は、１つのミニバッチを選択する（Ｓ１０２）。
【０１０７】
そして、ＣＰＵ４０１は、フォワードプロパゲーションを実行することで、実リード電圧を計算する（Ｓ１０３）。つまり、ＣＰＵ４０１は、モデル情報４０３に基づくニューラルネットワークモデルの入力層に、ヒストグラムと属性情報とを入力して、当該ニューラルネットワークモデルの出力層から実リード電圧を取得する。ＣＰＵ４０１は、Ｓ１０２によって選択されたミニバッチに含まれるレコード毎に、実リード電圧の計算を実行する。
【０１０８】
続いて、ＣＰＵ４０１は、Ｓ１０３によって得られた実リード電圧の計算値（calculated  value）と、正解データ（つまり実リード電圧の最適値）と、に基づいて、損失関数を計算する（Ｓ１０４）。
【０１０９】
損失関数の演算式は特定の演算式に限定されない。例えば、損失関数Lossは、例えば下記の式（１）のように定義される。
Loss  =  Mean  (WeightLS  *  MSE_Vi)  ・・・（１）
【０１１０】
式（１）において、添え字ｉはａからｇまでの何れかのアルファベットである。MSE_Viは、実リード電圧Ｖｉの計算値と実リード電圧Ｖｉの最適値との差分の２乗を、ミニバッチに含まれる全レコードについて平均することによって得られる値を示す。
【０１１１】
Meanは、７つのリード電圧Ｖａ〜Ｖｇについて値の平均を演算する処理を示す。式（１）の例では、リード電圧毎に重みWeightLSが加算されたMSE_Viが、平均の演算の対象に該当する。
【０１１２】
つまり、式（１）によれば、損失関数Lossは、重みが適用されたリード電圧毎の平均二乗誤差を平均することによって得られる。
【０１１３】
別の例では、損失関数Lossは、例えば下記の式（２）のように定義される。
Loss  =  Mean  (WeightLS  *  MSE_FBCi)  ・・・（２）
【０１１４】
式（２）において、MSE_FBCiは、実リード電圧Ｖｉの計算値を用いてデータをリードした場合に検出されるエラービットの数と、実リード電圧Ｖｉの最適値を用いてデータをリードした場合に検出されるエラービットの数と、の差分の２乗を、ミニバッチに含まれる全レコードについて平均することによって得られる値を示す。エラービットの数は、実際のリードによって求められてもよいし、シミュレーションによって求められてもよい。
【０１１５】
つまり、式（２）によれば、損失関数Lossは、重みが適用されたリード電圧毎のエラービットの数の平均二乗誤差を平均することによって得られる。
【０１１６】
なお、損失関数Lossの定義は、上記した２つの例に限定されない。
【０１１７】
損失関数で使用される重みWeightLSは、任意に設定される。図５の（Ａ）を用いて説明されたデータコーディングに従えば、各メモリセルに格納される３ビットのデータのうちのミドルビットは、Ｖｂ，Ｖｄ，およびＶｇの３つの実リード電圧を用いて判定され得る。これに対し、アッパービットおよびロアービットは、２つの実リード電圧を用いて判定され得る。つまり、ミドルビットの判定には、他のビットの判定に比べて多くの実リード電圧を用いた判定を必要とする。したがって、ミドルビットは、しきい値電圧の変化に対する耐性が、他のビットに比べて弱い。そこで、Ｖｂ，Ｖｄ，およびＶｇにかかる重みを、Ｖａ，Ｖｃ，Ｖｅ，Ｖｆにかかる重みよりも大きくすることで、Ｖｂ，Ｖｄ，およびＶｇを他の実リード電圧よりも最適値により近づけるようにしてもよい。
【０１１８】
Ｓ１０４に続いて、ＣＰＵ４０１は、バックプロパゲーションを実行して、ニューラルネットワークモデルに含まれる重み毎に損失関数の勾配を計算する（Ｓ１０５）。
【０１１９】
そして、ＣＰＵ４０１は、ニューラルネットワークモデルに含まれる各重みを、損失関数の勾配に基づいて更新する（Ｓ１０６）。つまり、ＣＰＵ４０１は、モデル情報４０３に含まれる各重みを更新する。
【０１２０】
そして、ＣＰＵ４０１は、まだ選択されていないミニバッチが存在するか否かを判定する（Ｓ１０７）。まだ選択されていないミニバッチが存在する場合（Ｓ１０７：Ｙｅｓ）、Ｓ１０２に制御が移行して、ＣＰＵ４０１は、まだ選択されていないミニバッチから一つのミニバッチを選択する。
【０１２１】
まだ選択されていないミニバッチが存在しない場合（Ｓ１０７：Ｎｏ）、ＣＰＵ４０１は、トレーニングを終了するか否かを判定する（Ｓ１０８）。トレーニングの終了の判定の基準は、特定の基準に限定されない。ＣＰＵ４０１は、予め決められた数のエポックが実行された場合に、トレーニングを終了すると判定してもよい。または、ＣＰＵ４０１は、損失関数が所定以下になった場合に、トレーニングを終了すると判定してもよい。
【０１２２】
トレーニングを終了しないと判定された場合（Ｓ１０８：Ｎｏ）、制御がＳ１０１に移行して、ＣＰＵ４０１は、各バッチに含まれるレコード群をシャッフルする。
【０１２３】
トレーニングを終了すると判定された場合（Ｓ１０８：Ｙｅｓ）、コンピュータ４００によるトレーニングが完了する。
【０１２４】
トレーニング後のモデル情報４０３は、モデル情報２０７としてメモリシステム１に実装される。
【０１２５】
図１１は、実施形態のメモリシステム１において実行される、実リード電圧を推定する動作の一例を示すフローチャートである。
【０１２６】
まず、メモリコントローラ２００は、対象のワード線に対して参照リード電圧Ｖｒ１，Ｖｒ２，Ｖｒ３，Ｖｒ４，Ｖｒ５，Ｖｒ６，Ｖｒ７を用いたリードを行うことによって、参照リード電圧毎に各メモリセルの状態を取得する（Ｓ２０１）。
【０１２７】
そして、メモリコントローラ２００（例えばＣＰＵ２０３）は、参照リード電圧毎の各メモリセルの状態に基づいて、ヒストグラムを生成する（Ｓ２０２）。
【０１２８】
続いて、メモリコントローラ２００は、属性情報を取得する（Ｓ２０３）。属性情報の取得の方法は、属性情報の種類に応じて異なる。
【０１２９】
例えば、プログラム／イレースサイクルの実行回数、リードの実行回数、およびプログラムが実行されてからの経過時間は、メモリコントローラ２００によって管理情報２０９に記録されている。メモリコントローラ２００は、管理情報２０９からプログラム／イレースサイクルの実行回数、リードの実行回数、およびプログラムが実行されてからの経過時間のうちの属性情報に該当する情報を、管理情報２０９から取得することができる。
【０１３０】
なお、プログラム／イレースサイクルの実行回数、リードの実行回数、およびプログラムが実行されてからの経過時間は、ブロックＢＬＫなどの所定の単位領域毎に記録されている。メモリコントローラ２００は、対象のワード線を含む単位領域にかかる属性情報を、管理情報２０９から取得する。なお、単位領域はブロックＢＬＫに限定されない。単位領域はワード線などであってもよい。
【０１３１】
なお、管理情報２０９は、例えばＲＡＭ２０２に格納されており、管理情報２０９に対する記録または更新は、ＲＡＭ２０２上で実行される。管理情報２０９は、メモリシステム１の電源断の前には、ＲＡＭ２０２からＮＡＮＤメモリ１００に退避され、メモリシステム１の起動後には、ＮＡＮＤメモリ１００からＲＡＭ２０２にロードされる。
【０１３２】
また、温度が属性情報として使用される場合には、メモリコントローラ２００は、温度センサ２０６の出力値を属性情報として取得することができる。または、メモリコントローラ２００は、プログラム時などに温度センサ２０６の出力値を取得して、当該出力値を管理情報２０９にプログラム時の温度情報として記録し、管理情報２０９に記録された温度情報を属性情報として取得してもよい。
【０１３３】
また、ワード線番号が属性情報として使用される場合には、メモリコントローラ２００は、参照リード電圧を用いたリードが実行されたワード線の番号を属性情報として取得することができる。
【０１３４】
続いて、メモリコントローラ２００は、フォワードプロパゲーションを実行することで、実リード電圧を計算する（Ｓ２０４）。つまり、メモリコントローラ２００は、モデル情報２０７に基づくニューラルネットワークモデル３００の入力層に、ヒストグラムと属性情報とを入力して、当該ニューラルネットワークモデル３００の出力層から出力される実リード電圧を取得する。
【０１３５】
メモリコントローラ２００は、取得した実リード電圧の計算値を電圧情報２０８に記録する（Ｓ２０５）。メモリコントローラ２００は、以降のリードでは、電圧情報２０８に記録された計算値を使用する。
【０１３６】
なお、図１１に示された実リード電圧の推定の動作は、任意のタイミングで実行される。
【０１３７】
例えば、ＥＣＣ２０５が、あるワード線から読み出されたデータに含まれるエラービットの訂正に失敗した場合、メモリコントローラ２００は、当該ワード線を対象のワード線と見なして図１１に示される実リード電圧の推定を実行する。そして、メモリコントローラ２００は、実リード電圧の推定によって更新された実リード電圧の設定値を用いることによって、当該ワード線に格納されたデータのリードを再び実行する。
【０１３８】
別の例では、ＥＣＣ２０５が、あるワード線から読み出されたデータに含まれるエラービットの訂正に成功しても、エラービットの数が所定個以上であった場合、当該ワード線を対象のワード線と見なして実リード電圧の推定を実行する。そして、メモリコントローラ２００は、次回以降のリードでは、実リード電圧の推定によって更新された実リード電圧の設定値を用いる。
【０１３９】
実リード電圧の推定の動作は、所定の時間間隔で実行されてもよい。つまり、ＥＣＣ２０５による誤り訂正の結果に依存しない任意の基準によって、実リード電圧の推定の動作を実行するタイミングが決定されてもよい。
【０１４０】
なお、以上では、ＴＬＣの方式でデータを保持するメモリセルに対応したニューラルネットワークモデル３００を挙げて説明した。出力層を構成するノードの数を変更することで、ニューラルネットワークモデル３００を、ＳＬＣ（Single  Level  Cell）、ＭＬＣ（Multi  Level  Cell）、ＱＬＣ（Quad  Level  Cell）など、ＴＬＣ以外の方式でデータを保持するメモリセルに対応させることが可能である。
【０１４１】
図１２は、実施形態のメモリコントローラ２００が使用するトレーニング済みのニューラルネットワークモデルの構成の別の一例を示す模式的な図である。本図は、ＱＬＣの方式でデータを保持するメモリセルに対応するニューラルネットワークを示している。ＱＬＣの方式によれば、各メモリセルは、４ビットのデータを保持することができる。
【０１４２】
図１２の例によれば、入力層は、１６個のビンを有するヒストグラムを入力するための１６個のノードと、管理情報用の３個のノードと、によって構成される。本図に示されるニューラルネットワークモデル３００の入力層に入力される１６個のビンを有するヒストグラムは、１５点の参照リード電圧を使用することによって取得される。管理情報用の３個のノードには、それぞれ異なる種類の管理情報が入力される。例えば、３個のノードには、ワード線番号、プログラム／イレースサイクルの実行回数、およびリードの実行回数が入力される。
【０１４３】
出力層は、各メモリセルに格納される４ビットのデータを判定するための１５点の実リード電圧Ｖａ〜Ｖｏの最適値を出力するための１５個のノードによって構成される。そして隠れ層は、１以上のノードによって構成される。図１２では、一例として、隠れ層は、３２個のノードによって構成されている。
【０１４４】
なお、図１２の例では、隠れ層で使用される活性化関数は、ＲｅＬＵ関数であり、出力層で使用される活性化関数は、線形関数である。隠れ層で使用される活性化関数は、ＲｅＬＵ関数に限定されない。隠れ層で使用される活性化関数としては、任意の非線形活性化関数を利用することが可能である。
【０１４５】
このように、出力層が備えるノードの数を変更することによって、種々の方式でデータを保持するメモリセルに対応したニューラルネットワークモデル３００を得ることができる。
【０１４６】
以上述べたように、実施形態によれば、メモリコントローラ２００は、１以上の参照リード電圧を用いてしきい値電圧に対するメモリセルの数を示すヒストグラムを取得する。そして、メモリコントローラ２００は、取得されたヒストグラムを、１以上の実リード電圧を出力する出力層を備えたトレーニング済みのニューラルネットワークモデル３００に入力して、出力層から出力された１以上の実リード電圧を、リードに使用する。ニューラルネットワークモデル３００は、非線形活性化関数によって活性化される１以上の隠れ層を備える。
【０１４７】
これによって、非線形回帰が実現するので、実リード電圧の最適値を高い精度で推定することが可能となる。
【０１４８】
なお、ニューラルネットワークモデル３００は、必ずしも非線形活性化関数によって活性化される１以上の隠れ層を備えなくてもよい。その場合、ニューラルネットワークモデル３００は、線形回帰を行うことになる。ヒストグラムと実リード電圧の最適値との関係が線形である場合には、ニューラルネットワークモデル３００が非線形活性化関数によって活性化される１以上の隠れ層を備えなくても、実リード電圧の最適値を高い精度で推定することが可能である。
【０１４９】
また、ニューラルネットワークモデル３００は、ヒストグラムが入力されるノードと属性情報が入力されるノードとを備える入力層を備えている。つまり、メモリコントローラ２００は、ニューラルネットワークモデル３００の入力層に、ヒストグラムと属性情報とを入力する。
【０１５０】
ニューラルネットワークモデル３００の入力データとして、属性情報が加えられることによって、実リード電圧の最適値の推定の精度がさらに向上する。
【０１５１】
なお、前述したように、ヒストグラムを取得するために使用される参照リード電圧の数は、実リード電圧の数よりも少なくてもよい。ヒストグラムを取得するために使用される参照リード電圧の数が実リード電圧の数よりも少ない場合、ニューラルネットワークモデル３００の入力層に含まれるヒストグラムの入力用のノードの数を減らすことができる。これによって、ニューラルネットワークモデル３００の計算の負荷が低減される。
【０１５２】
また、ニューラルネットワークモデル３００のトレーニングに要する時間が低減される。ヒストグラムを生成するために必要となる参照リード電圧の数が低減されることで、ヒストグラムを生成するためのリードの回数が減るので、メモリコントローラ２００によるヒストグラムの生成に要する時間を短縮することができる。同様の理由により、データベース４０４用のヒストグラムの生成に要する時間を短縮することができる。
【０１５３】
なお、属性情報は、プログラム／イレースサイクルの実行回数であってもよい。プログラム／イレースサイクルをニューラルネットワークモデル３００の入力データに含めることによって、プログラム／イレースサイクルの実行回数に起因するしきい値電圧の変化を考慮した推定が可能となる。
【０１５４】
また、属性情報は、リードの実行回数であってもよい。リードの実行回数をニューラルネットワークモデル３００の入力データに含めることによって、リードディスターブを考慮した推定が可能となる。
【０１５５】
また、属性情報は、ワード線番号、つまりメモリセルの位置情報であってもよい。メモリセルの位置情報をニューラルネットワークモデル３００の入力データに含めることによって、メモリセルの位置毎の特性の違いを考慮した推定が可能となる。
【０１５６】
また、属性情報は、温度センサ２０６の出力値であってもよい。温度センサ２０６の出力値をニューラルネットワークモデル３００の入力データに含めることによって、温度に応じたメモリセルの特性の違いを考慮した推定が可能となる。
【０１５７】
また、属性情報は、プログラムが実行されてからの経過時間であってもよい。プログラムが実行されてからの経過時間をニューラルネットワークモデル３００の入力データに含めることによって、時間の経過によるしきい値電圧の低下を考慮した推定が可能となる。
【０１５８】
また、実施形態によれば、コンピュータ４００では、ＣＰＵ４０１は、ヒストグラムと１以上の実リード電圧とをデータベース４０４から取得する（Ｓ１０２）。そして、ＣＰＵ４０１は、当該ヒストグラムを入力データとして使用し、当該１以上の実リード電圧を正解データとして使用するトレーニングを、ニューラルネットワークモデルに対して実行する（Ｓ１０１〜Ｓ１０８）。
【０１５９】
これによって、ヒストグラムから１以上の実リード電圧の最適値を高い精度で推定することが可能なニューラルネットワークモデル３００を得ることが可能となる。
【０１６０】
また、ＣＰＵ４０１は、データベース４０４から属性情報をさらに取得して、当該属性情報を入力データに含める。
【０１６１】
ヒストグラムと属性情報とを入力データとしたトレーニングが実行されることで、ニューラルネットワークモデル３００の推定の精度をさらに向上させることが可能となる。
【０１６２】
また、トレーニングの対象となるニューラルネットワークモデルは、非線形活性化関数によって活性化される１以上の隠れ層を備える。これによって、非線形回帰が実現するので、高精度な推定が可能となる。
【０１６３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６４】
１  メモリシステム、２  ホスト、１００  ＮＡＮＤメモリ、１０１  メモリチップ、１１０  周辺回路、１１１  メモリセルアレイ、２００  メモリコントローラ、２０３，４０１  ＣＰＵ、２０６  温度センサ、２０７，４０３  モデル情報、２０８  電圧情報、２０９  管理情報、３００  ニューラルネットワークモデル、４００  コンピュータ、４０２  メモリ、４０４  データベース。
【図１】
2020144958.tif 000003
【図２】
2020144958.tif 000004
【図３】
2020144958.tif 000005
【図４】
2020144958.tif 000006
【図５】
2020144958.tif 000007
【図６】
2020144958.tif 000008
【図７】
2020144958.tif 000009
【図８】
2020144958.tif 000010
【図９】
2020144958.tif 000011
【図１０】
2020144958.tif 000012
【図１１】
2020144958.tif 000013
【図１２】
2020144958.tif 000014