Как стать автором
Обновить
3130.16
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Как сделать компьютерную память из ржавых гвоздей и нейросети — из медных проволок?

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров8K
Картинка — Kaboompics, Flatart, Freepik

Сегодня мы поговорим о таком интересном классе электронных компонентов, который носит название «мемристоры» и позволяет даже строить на их основе нейросети.

Их привлекательность заключается в том, что их вполне можно делать даже самостоятельно, из подручных компонентов.

В последнее время мы привыкли, что под понятием нейросетей подразумеваются определённые программные структуры. Однако мемристоры позволяют строить нейросети на физической основе! О_о

Аппаратные физические нейросети… Как вам такое? :-) Весьма близко к тому, что мы видим в природе, кстати говоря...

Небольшой спойлер: ниже мы остановимся больше на физической стороне явления и как (в теории) можно было бы создавать на его основе устройства. Тема весьма обширная и рассмотрение ещё и практической работы с созданной нейросетью/ячейкой памяти выйдет очень сильно далеко за пределы статьи (возможно, в будущем вернёмся и к этому аспекту). В конце статьи будут ключевые слова, по которым можно поискать в интернете дополнительную информацию по работе с такими нейросетями/ячейками памяти. Итак...

Суть явления


Это довольно необычные электронные компоненты, которые могут менять своё сопротивление, в зависимости от того, какой ток через них проходил ранее.

В отличие от других широко использующихся и известных электронных компонентов, таких, как резисторы, конденсаторы и др., мемристоры не были широко известны до 2008 года*, до официального подтверждения учёными из компании Hewlett-Packard, которые продемонстрировали наноструктуру на основе оксида титана, обладающую гистерезисом** вольт-амперной (ВАХ) характеристики.

*Идея мемристора была известна ещё в 1971 году, когда она была предложена Леоном Чуа, однако на тот момент технологии не позволяли ещё создать компактный и управляемый мемристор для коммерческого применения.

**Гистерезис вольт-амперной характеристики подразумевает явление, когда сопротивление элемента зависит не только от текущего напряжения, но и от того, какой ток проходил через него ранее.

На практике это выглядит следующим образом:

  • Если плавно увеличивать напряжение на мемристоре, то его сопротивление будет снижаться, а ток через него будет расти.
  • Если затем начать уменьшать напряжение, то ток не повторит предыдущую кривую, так как сопротивление останется низким, ниже, чем было при подаче тока в самом начале.

Это похоже на аналогию из жизни, где для первого открывания двери нужно её сильно толкнуть, но в то же время, для открытия её во второй и последующие разы потребуется меньше усилий, так как петли разработаются и позволят открывать дверь легче.

Подобный эффект памяти позволяет мемристорам хранить информацию, где высокое или низкое сопротивление можно рассматривать как аналогию 0 или 1*.

*Но не нужно воспринимать сказанное слишком буквально — если сказать в общем, то мемристоры — это аналоговые элементы и хранят скорее не 0 или 1 — а пути протекания тока, сложившиеся из-за установившихся сопротивлений — «протоптанные тропинки», если можно так сказать, так как ток ищет путь с наименьшим сопротивлением для своего протекания.

Также этот эффект позволяет имитировать работу синапсов в мозге (контакт между рефлекторной клеткой и нейроном или между несколькими нейронами), где чем чаще используется связь, тем она сильнее.

Таким образом можно сказать, что гистерезис — основная отличительная черта мемристора, отличающая его от обычного резистора.

Подобное поведение наблюдается в материалах, где под воздействием электрического поля происходят обратимые изменения структуры или распределение зарядов.

Среди наиболее известных механизмов, за счёт которых наблюдается это явление, можно назвать:

  • Миграция ионов кислорода в оксидах металлов, например, таких как $TiO_{2}, TaO_{x}$.
  • Фазовые переходы, например, между аморфным и кристаллическим состояниями в халькогенидных стёклах.
  • Реконфигурация точечных эффектов (вакансий*, междуузловых атомов*).

*Здесь подразумевается, что в оксидах металлов, атомы иногда расположены не идеально — присутствуют «вакансии», то есть «дырки» в кристаллической решётке, где не хватает атома; также наблюдаются и «межузловые» атомы — то есть, лишние атомы «втиснуты» между узлами решётки.

Здесь и далее мы будем рассматривать в основном мемристоры, представляющие собой оксидные плёнки на металлах.

Рассмотрим последний механизм подробнее (так как он наиболее близок к тому, что мы будем рассматривать ниже).

С мемристорами это связано следующим образом: когда мы подаём напряжение, ионы металла, перемещаются, заполняя вакансии или выталкивая атомы в межузловое пространство.

В свою очередь, это меняет локальную проводимость — появляется «проводящая нить» или, наоборот, появляется разрыв.

После снятия напряжения дефекты частично остаются на своих местах — именно таким образом и возникает «память о прошлом».

Например, в случае ржавчины ($Fe_{2}O_{3}$), покрывающей гвозди (она представляет собой пористый оксид железа с массой дефектов) — при пропускании электрического тока, ионы железа перемещаются между вакансиями в оксидной плёнке.

В тех местах, где ионов скапливается больше — образуются проводящие нити.

После отключения напряжения, часть нитей сохраняется — это и есть «память» сопротивления.

В свою очередь, в медных оксидах ($CuO, Cu_{2}O$) наблюдается более контролируемый процесс, так как:

  • В отличие от ржавых гвоздей, медный оксид более тонкий и однородный — так как образуется с помощью нагрева или электролиза; в ржавчине же — он рыхлый и нестабильный.
  • Медные оксидированные детали имеют более чёткие пороги переключения, так как ионы меди движутся более предсказуемо, в то время как в оксиде железа — более хаотично, из-за примесей.
  • Медь гораздо легче восстанавливается, так как проводящие нити меди формируются при гораздо меньших напряжениях (1-3 В против 5-10 В для железа).
  • Для переключения медных мемристоров требуется гораздо меньше циклов*, по сравнению с железными: в среднем 10 циклов, в то время как железным может потребоваться 50-100 циклов.

*Выше мы говорили о том, что мемристоры, по сути, имитируют работу синапсов мозга — требуется определённое количество импульсов напряжения (одного чаще всего недостаточно), чтобы сформировать устойчивую связь: при первом включении, ток создаёт случайные проводящие нити, однако они хрупкие.

Последующие циклы можно назвать «тренировкой» — проводящие нити становятся толще и стабильнее, как тропинка, которая была утоптана множеством путников.

Процесс можно ускорить, если, в случае меди, нагреть её до 150°С, для увеличения пластичности оксида — тогда может хватить и 3-5 циклов; в свою очередь, для железа, хорошо поможет добавка электролита (соль и вода), чтобы усилить упорядоченное движение ионов.

Выше мы писали всё время о записи, а как же стирать записанное?

Очень просто: нужно всего лишь подать напряжение обратной полярности — при этом в рассмотренных выше оксидах меди или железа произойдёт разрушение проводящих нитей, так как ионы металлов возвратятся на своё место.

Однако так же, как и при записи, может потребоваться несколько циклов для надёжного стирания.

Кроме того, нужно иметь в виду, что требуется превысить пороговое напряжение (так как разрушение проводящих нитей требует больше усилий) — например, если мы записывали напряжение (для меди) в +1 В, то, для надёжного стирания может потребоваться использовать -5 В (конкретные напряжения подбираются экспериментально и зависят от толщины оксидной плёнки и площади контакта).

Единичный мемристор


Одним из самых простых способов наблюдения этого эффекта является использование обычных ржавых гвоздей или стальной проволоки, покрытых оксидом железа.

В качестве альтернативного варианта можно использовать медную проволоку, покрытую $CuO$ — для этого её следует нагреть до появления тёмного налёта.

Кстати, запомните этот вариант с медной проволокой — мы к нему ещё вернёмся! ;-)

Далее необходимо сформировать активный слой, то есть контакт между двумя электродами, через оксидный слой, что можно осуществить следующим образом, для железа и меди, соответственно:

  • Ржавый гвоздь погружается в электролит (слабый раствор поваренной соли), после чего в него же погружается и второй электрод — из нержавеющей стали или графита.
  • Две медные проволоки с окисленными концами слегка соприкасаются друг с другом или соединяются через влажную среду.

Далее при подаче напряжения питания (0-5 В) наблюдается гистерезис вольт-амперной характеристики, о котором мы говорили выше.

Наблюдать эффект можно с помощью амперметра и осциллографа или снятием показателей с АЦП Ардуино/esp32.

Вот и всё, у нас, по сути, готов единичный элемент компьютерной памяти — несмотря на то, что он, казалось бы, из совсем неподходящего материала — ржавого гвоздя или медной проволоки!

В простейшем случае можно обойтись даже без электролита между контактами, однако в этом случае возникнут затруднения:

  • Нестабильный контакт.
  • Менее выраженный гистерезис.
  • Требуется придавливание проволок друг другу (для улучшения контакта).

В общем случае можно сказать, что с электролитом будут более резкие переключения — т. е. сопротивление будет изменяться в 10-100 раз, а пороги напряжения для срабатывания — стабильнее.

В противовес ему, если не использовать электролит, то эффект потребует больше циклов для тренировки и сопротивления будут изменяться менее выражено.

Массивы мемристоров

Одиночный мемристор — это, конечно, хорошо, однако массив мемристоров в корне меняет дело и даёт новые интересные возможности!

На создание таких массивов учёные были вдохновлены технологиями производства печатных плат, и существуют экспериментальные технологии, позволяющие создавать такие массивы аналогично печатным:


Одна из таких технологий (иллюстрация конечного результата которой приведена выше), включает в себя следующие шаги:

  • Берётся двухслойный фольгированный текстолит, на одной стороне которого фоторезистом или даже лаком/спиртовым маркером наносятся квадратами изолирующие точки (например, с расстоянием между центрами точек в 5х5 мм).
  • На обратной стороне текстолита, наносятся защищающие полоски, на те места, где будут будущие токопроводящие шины.
  • Текстолит травится в хлорном железе, таким образом, что после травления, одна сторона его становится покрытой токопроводящими медными точками, а вторая сторона покрывается медными полосками, связывающими точки между собой, в виде полосок.
  • В центрах точек сверлятся сквозные отверстия, после чего делается металлизация этих отверстий — то есть, точки на лицевой стороне и полоски на обратной стороне становятся связанными друг с другом.
  • Далее, текстолит укладывается на массивную алюминиевую пластину, выступающую в качестве теплоотвода таким образом, чтобы этой пластины касалась нижняя часть текстолита, которая покрыта токопроводящими полосками из протравленной фольги.
  • Текстолит нагревается с лицевой стороны (где медные точки) до 180-200°С и выдерживается при такой температуре порядка 1-2 часов, чтобы вызвать покрытие медных точек слоем оксида — при этом обратная сторона текстолита, покрытая дорожками — не оксидируется, так как в этот момент тепло от неё эффективно отводится с помощью массивной алюминиевой пластины, на которой текстолит лежит.
  • После остывания, на ту сторону, где медные точки — перпендикулярно к медным полоскам на обратной стороне — наносятся полоски из графитовой краски (известен способ нанесения с помощью распыления аэрографом), или наклеить алюминиевые полоски из фольги — на токопроводящий клей; можно даже просто прочертить перпендикулярные полоски карандашом.

В местах пересечения верхних полосок (алюминий/карандаш/графитовая краска) с медными точками, покрытыми оксидом — образуются мемристоры.

Всё, массив мемристоров готов! Это не единственно возможная технология, существует и ряд других.

Теперь остаётся только подавать напряжение на конкретный мемристор, включая соответствующую «строку» и «столбец» — чтобы записать/стереть/прочитать.

Те, кто хоть немного сталкивался с электроникой, сразу увидят ключевую проблему всей этой затеи: коммутация большого количества выводов такого массива.

Таким образом, основной проблемой будет являться не столько физическое создание самого массива, сколько управление выводами этого массива (их банально слишком много) — причём проблема будет критически расти, с ростом количества элементов массива.

В электронике вопрос коммутации большого количества выводов решается использованием разнообразных мультиплексоров/демультиплексоров, сдвиговых регистров, FPGA-матриц.

Однако, зададимся странным вопросом: а может ли этот массив коммутировать сам себя, не требуя для этого внешних чипов и устройств?

Тем более, что не сказать, чтобы они были слишком дешёвыми, особенно для больших массивов (а нам — чем больше, тем лучше: будет «умнее»). Да и паять надо будет много (а не хочется)...

Как ни странно, такой способ есть, и он довольно прост: встроенная самоорганизущаяся структура — на принципе домино (волновая адресация).

Проблема только будет заключаться в том, что без чёткой адресации мы не сможем запрашивать конкретные данные — «дай данные#1», «дай данные#2» — такая структура может работать только с ассоциативной памятью, например, когда мы сможем ей «показать» — т. е. подать на массив последовательность аналоговых сигналов (уровней напряжения), символизирующих букву А, всего по 2 проводам, он её запомнит и будет узнавать потом среди других (более подробно об этом написано почти в конце статьи).

Делается это следующим образом:

Поверх каждой медной точки, покрытой оксидом меди — добавляется капелька из полупроводника — оксида цинка ($ZnO$ — используется много где, широко распространён; может быть даже в зубных пастах, кремах, детских присыпках), — этот оксид может быть нанесён через трафарет, для всех точек сразу.

Если бы нанести оксид цинка прямо на медь, и он был бы перемычкой между медью и графитом — образовался бы классический барьер Шоттки, который работал бы как диод, пропуская ток только в одном направлении.

В нашем же случае образуется гетеропереход (полупроводник-полупроводник), так как оксид цинка наносится на оксид меди, и этот переход будет несколько хуже классического варианта с прямым нанесением на медь, но тем не менее, всё равно будет работать как диод, только несколько менее эффективно и для переключения потребуется чуть большее напряжение и обратные утечки через место контакта (оксид-оксид) возрастут.

Изменяется и расположение графитовых дорожек: в случае с полной адресацией они были нанесены прямо поверх текстолита, сейчас же прямо поверх текстолита, с той стороны, где точки, — наносится тонкая плёнка, с прорезями в тех местах, где точки.

В свою очередь, графитовые дорожки наносятся прямо поверх плёнки.

Такая конструкция образует конденсатор, а графитовые дорожки выступают в качестве резисторов; всё это вместе представляет собой «RC- контур», назначение которого заключается в замедлении протекания тока, чтобы ток тёк не сразу по всем ячейкам, а по цепочке, по принципу домино, то есть ток течёт не хаотично, и каждая ячейка активируется по очереди; таким образом разная скорость течения тока по разным путям, например, позволяет отличать букву А от буквы Б.

Далее, в углу массива (ячейка [0,0]) подаётся инициирующий импульс, и активированные мемристоры последовательно переключают соседей по цепной реакции, вследствие чего волна распространяется до края массива за примерно 1 мс (при размере массива в 1000х1000 мемристоров).

Этот массив можно применить в качестве ассоциативной памяти, например, массив 1000х1000 способен хранить до 100 образов, например, рукописных цифр 28х28 пикселей (правда, теоретически — если бы у нас была возможность доступа ко всем контактам — но у нас её нет, т. к. мы строим самоорганизующуюся структуру и пытаемся избавиться от необходимости FPGA и прочих коммутаторов — поэтому она сможет «помнить» только 1 вариант данных).

Обучение производится импульсами по 1-3 В: например, мы хотели бы записать букву «Б»: даём ему импульсы 3В-1В-2В (просто условность, для понимания сути) — в результате чего ток прокладывает определённые «узоры» из соответствующим образом активированных мемристоров.

Далее, если мы ему подадим тот же самый «токовый рисунок» — то в ответ получим сильные сигналы, символизирующие то, что массив узнал образ. Если же мы его попробуем обмануть и подадим ему условные сигналы буквы «А» — то в ответ получим слабые сигналы: массив не узнал.

Стирание такого массива также будет отличаться от стандартного массива, где это могло бы быть осуществлено просто сменой полярности — в настоящем случае один из самых применимых методов — это разрядка через нагрузку: подать напряжение на все строки и столбцы (через резистор 10-100 кОм, чтобы не было короткого замыкания), в результате чего ток потечёт через этот резистор, постепенно разряжая ячейки.

Диоды (переход: капелька $ZnO$-оксид меди($CuO$)) останутся закрытыми, но паразитные утечки через них постепенно сбросят состояние.

Прочитав всё это, вы наверняка скажете: это всё, конечно, интересно, но всё равно как-то сложно, надо платы травить, чего-то там сверлить...

А что, если я скажу вам, что всё это можно сделать многократно проще — для этого всего лишь потребуется:

  • Медная проволока и коммутатор — сдвиговый регистр/FPGA (подключённые к каждому столбцу/строке), резисторы на 100 кОм на каждый столбец или строку (на выбор — чтобы не было короткого замыкания), Arduino — если строить вариант с адресацией.
  • Если строить вариант без адресации — то всё то же самое, что и выше, только не нужны сдвиговые регистры или FPGA, резистор на 100 кОм ставим один, Arduino и массив мемристоров связаны двумя проводами: земля и [0,0] ячейка.


Выше мы уже узнали о том, что покрытые оксидом медные проволоки, коснувшиеся друг друга — в месте контакта образуют мемристор (для стабильности можно использовать электролит, в качестве которого взять слабый раствор поваренной соли, которым смочить место контакта).

Таким образом, вы уже наверняка поняли: берётся ряд медных проволочек без изоляции, обжигается на огне, до появления чёрного налёта на поверхности, после чего укладывается друг на друга перекрёстно, в виде решётки.

Для улучшения контакта, места пересечения проволок можно смочить электролитом (слабый раствор поваренной соли).

Далее всё это плотно придавливается каким-либо грузом сверху, чтобы улучшить контакт.

Вот и всё, ваш массив мемристоров готов! Но, это вариант с адресацией.

Если строить вариант без адресации — придётся вместо второго слоя проволок, уложенных под углом 90°, использовать электрическую плёнку, капельку оксида цинка на каждое пересечение и массив вторых электродов из графитовой краски.

Тем не менее, очевидно, что этот вариант будет многократно проще, чем травить платы :-)

Кстати, любопытный момент — вот мы говорим о варианте без адресации, и внимательный читатель может подумать (вполне обоснованно!) что массив хранит значение сопротивления R — которое было получено во время последнего импульса, так как у нас он связан с Ардуино всего 2 проводами (земля и [0,0] ячейка). И как тогда быть — мы же перезаписываем старые данные последними как бы? Всё верно! То есть, например, чтобы записать букву А (пример условный, все цифры далее — тоже) — мы заранее кодируем в памяти Ардуино букву А как уникальную последовательность сопротивлений, где соседние значения не повторяются. Например: 100 Ом → 50 Ом → 10 Ом. В то время как букву Б кодируем как 200 Ом → 80 Ом → 5 Ом.

И при чтении мы «знаем» — что раз сейчас текущее сопротивление 5 Ом — то, с вероятностью почти в 100% — это буква Б.

Из этого проистекает ещё одно следствие — массив для такого использования переусложнён!

Для такого последовательного хранения данных годится вполне и единичный мемристор!

Таким образом — массив мемристоров интересен только в варианте с адресацией и коммутацией выводов на базе сдвиговых регистров/FPGA.

Для чего это можно применять?

Известны применения, когда массив 4х4 элемента распознавал буквы или 5х5 — мог распознать наклон линии, а массив 100х100 — рукописные буквы (все эти варианты — когда есть доступ ко всем выводам, т. е. применяется FPGA-коммутация или коммутация на сдвиговых регистрах); также возможно создание аналогового компьютера и применения не ограничиваются этими — работы в этом направлении постоянно идут.

Напоследок можно сказать, что структуры из мемристоров позволяют реализовать «бессерверное» обучение — нет никакого CPU, а вся логика возникает из физики материалов.

Кроме того, подобные структуры отличаются и энергоэффективностью: ~10 мкВт/синапс (в 100 000 раз меньше, чем у GPU) и отличаются малой плотностью элементов, по сравнению с кремниевыми чипами (по крайней мере, на данный момент :-) ).

Тема эта весьма объёмная и не получится осветить её в рамках одной статьи, но, в любом случае, надеюсь, было интересно.

Желающие более подробно ознакомиться с использованием в практических задачах подобных нейросетей/ячеек памяти могут поискать в интернете дополнительную информацию по следующим ключевым словам и фразам:

  • Handmade Copper Oxide Memristor Crossbars.
  • Bioinspired Memristive Crossbar Arrays.
  • Crossbar Arrays of Self-Assembled Memristive Nanowires for Associative Memory.
  • Flexible Memristor Crossbar Arrays with Embedded Copper Nanowires for Wearable Electronics.
  • Self-assembled nanowire memristor crossbars for neuromorphic computing.

© 2025 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
Теги:
Хабы:
+58
Комментарии13

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds