Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
02 мар 2023 Чт
Особо ничего нового
Сегодня день, в котором ничего такого не произошло, просто работал, что-то делал, выполнял определенные задачи. Часто размышляю о том, что бы мне хотелось сделать на ПЛИС, и даже если и думаю, то все эти проекты довольно сложные для их реализации. К примеру думал о том, чтобы сделать нейросеть. Как можно вспомнить, искусственная нейросеть опирается на нейроны, реализованные через сигмоиду, то есть вот такую функцию
Она сложна по двум причинам для своей реализации. Во-первых, тут требуется найти экспоненту дробного числа, что уже само по себе непростое дело, и, во-вторых, требуется разделить число. Сложность вычисления очень велика для каждого нейрона.
Как вообще вычислять это дело? К примеру, экспонента может быть разложена следующим образом:
Для нейронной сети хорошо бы использовать float-point, но вполне даже может пригодиться число половинной точности, так что количество умножении может быть к примеру, 10 или 11, по количеству двоичных чисел в мантиссе. Значит, 11 тактов придется потратить на то, чтобы возвести экспоненту в степень. Однако, это не все! Как минимум, надо сделать деление, и на деление тоже тратится 11 тактов (длина мантиссы). Кстати, в случае с отрицательной экспонентой, то есть, при возведении в степень отрицательного значения, можно лишь взять другой набор значений.
Получается, чтобы вычислить один нейрон, потребуется минимально 22 такта + то количество тактов, которое нужно для сложения и умножения весов на входящие значения. Допустим, что мы даже так, тратим 50 тактов на вычисление одного нейрона, то сколько нейронов можно будет вычислить в секунду? На частоте 25 мгц это будет 500 тыс нейронов. Это в целом, неплохо, если нейросеть не делать очень большой.
У меня постоянный запар какой-то идет по оптимизации, чем бы ни занимался, хочется сделать все с максимальной скоростью. В итоге же я ничего не делаю! Да сколько можно то! Надо просто брать и делать и вообще на все плевать, хоть медленно, но сделать, чтобы работало.
Она сложна по двум причинам для своей реализации. Во-первых, тут требуется найти экспоненту дробного числа, что уже само по себе непростое дело, и, во-вторых, требуется разделить число. Сложность вычисления очень велика для каждого нейрона.
Как вообще вычислять это дело? К примеру, экспонента может быть разложена следующим образом:
Для нейронной сети хорошо бы использовать float-point, но вполне даже может пригодиться число половинной точности, так что количество умножении может быть к примеру, 10 или 11, по количеству двоичных чисел в мантиссе. Значит, 11 тактов придется потратить на то, чтобы возвести экспоненту в степень. Однако, это не все! Как минимум, надо сделать деление, и на деление тоже тратится 11 тактов (длина мантиссы). Кстати, в случае с отрицательной экспонентой, то есть, при возведении в степень отрицательного значения, можно лишь взять другой набор значений.
Получается, чтобы вычислить один нейрон, потребуется минимально 22 такта + то количество тактов, которое нужно для сложения и умножения весов на входящие значения. Допустим, что мы даже так, тратим 50 тактов на вычисление одного нейрона, то сколько нейронов можно будет вычислить в секунду? На частоте 25 мгц это будет 500 тыс нейронов. Это в целом, неплохо, если нейросеть не делать очень большой.
У меня постоянный запар какой-то идет по оптимизации, чем бы ни занимался, хочется сделать все с максимальной скоростью. В итоге же я ничего не делаю! Да сколько можно то! Надо просто брать и делать и вообще на все плевать, хоть медленно, но сделать, чтобы работало.
01 мар 2023 Ср
Сегодня 1 марта
Продолжил делать программу для того, чтобы получить полноценный экран с Award Modular, но пока что сегодня смог сделать совсем немного.
Что смог сделать, так это нарисовать вот этого человечка, выложив плитку из 6 символов. Следующая задача будет в том, чтобы наавардить да намодулярить еще Energy Star, и это не так просто будет. Всего он занимает 102 символа, среди них уникальных 76, поэтому, займет 76*16 + 102 = 1318 байта в памяти. Очень много памяти тратится, но я знаю, что делаю, потому что делаю совсем немного, так что все нормально.
И еще, может быть я даже перестану каждый день сюда писать, но это неточно. Пока будет интересно, буду писать, потому что хочу, чтобы у меня была полная история жизни, чтобы потом было что читать.
Что смог сделать, так это нарисовать вот этого человечка, выложив плитку из 6 символов. Следующая задача будет в том, чтобы наавардить да намодулярить еще Energy Star, и это не так просто будет. Всего он занимает 102 символа, среди них уникальных 76, поэтому, займет 76*16 + 102 = 1318 байта в памяти. Очень много памяти тратится, но я знаю, что делаю, потому что делаю совсем немного, так что все нормально.
И еще, может быть я даже перестану каждый день сюда писать, но это неточно. Пока будет интересно, буду писать, потому что хочу, чтобы у меня была полная история жизни, чтобы потом было что читать.
<< Ранние записи |
Поздние записи >>