Pengenalan
Menunjukkan kuasa pengaturcaraan neurosimbolik
1.Pengenalan
Sejak beberapa tahun lalu, kita telah melihat Transformer model berasaskan telah muncul dan telah berjaya diaplikasikan dalam banyak bidang seperti pemprosesan bahasa semula jadi atau penglihatan komputer. Dalam artikel ini, kami akan meneroka cara yang ringkas, boleh ditafsir dan berskala untuk menyatakan model pembelajaran mendalam, khususnya Transformer, sebagai seni bina hibrid, iaitu dengan menggabungkan pembelajaran mendalam dengan kecerdasan buatan simbolik. Oleh itu, kami akan melaksanakan model dalam rangka kerja neurosimbolik Python yang dipanggil PyNeuraLogic.
Dengan menggabungkan perwakilan simbolik dengan pembelajaran mendalam, kami mengisi jurang dalam model pembelajaran mendalam semasa, seperti kebolehtafsiran di luar kotak dan teknik inferens yang hilang. Mungkin, menambah bilangan parameter bukanlah cara paling munasabah untuk mencapai hasil yang diingini ini, sama seperti menambah bilangan megapiksel dalam kamera tidak semestinya menghasilkan foto yang lebih baik.
Rangka kerja PyNeuraLogic adalah berdasarkan pengaturcaraan logik - program logik mengandungi parameter yang boleh dibezakan. Rangka kerja ini sangat sesuai untuk data berstruktur yang lebih kecil (cth. molekul) dan model yang kompleks (cth. Transformers dan rangkaian neural graf). PyNeuraLogic bukanlah pilihan terbaik untuk data tensor yang tidak berkaitan dan besar.
Komponen utama rangka kerja ialah program logik yang boleh dibezakan, yang kami panggil templat. Templat terdiri daripada peraturan logik yang mentakrifkan struktur rangkaian saraf secara abstrak - kita boleh memikirkan templat sebagai rangka tindakan untuk seni bina model. Templat kemudian digunakan pada setiap contoh data input untuk menjana (melalui asas dan neuralisasi) rangkaian saraf yang unik kepada sampel input. Berbeza sepenuhnya daripada seni bina pratakrif lain, proses ini tidak boleh menyesuaikan dirinya kepada sampel input yang berbeza.
2. Symbolic Transformers
Biasanya, kami akan melaksanakan model pembelajaran mendalam dengan memproses kumpulan token input menjadi tensor yang besar. Ini masuk akal kerana rangka kerja dan perkakasan pembelajaran mendalam (seperti GPU) biasanya dioptimumkan untuk memproses tensor yang lebih besar dan bukannya berbilang tensor dengan bentuk dan saiz yang berbeza. Transformer tidak terkecuali, biasanya menggabungkan perwakilan vektor token tunggal ke dalam matriks besar dan mewakili model sebagai operasi pada matriks sedemikian. Walau bagaimanapun, pelaksanaan sedemikian menyembunyikan bagaimana token input individu berkaitan antara satu sama lain, seperti yang dibuktikan oleh mekanisme perhatian Transformer.
3. Mekanisme perhatian
Mekanisme perhatian membentuk teras semua model Transformer. Khususnya, versi klasiknya menggunakan apa yang dipanggil perhatian produk titik penskalaan berbilang kepala. Mari kita gunakan pengepala (untuk kejelasan) untuk menguraikan perhatian produk titik berskala ke dalam atur cara logik mudah.
Tujuan perhatian adalah untuk memutuskan bahagian input yang mana rangkaian harus fokus. Apabila melaksanakan, perhatian harus diberikan kepada nilai pengiraan berwajaran V. Berat mewakili keserasian kunci input K dan pertanyaan Q. Dalam versi khusus ini, pemberat dikira oleh fungsi softmax produk titik pertanyaan Q dan kunci pertanyaan K, dibahagikan dengan punca kuasa dua dimensi vektor ciri input d_k.
(R.weights(V.I, V.J) <= (R.d_k, R.k(V.J).T, R.q(V.I))) | [F.product, F.softmax_agg(agg_terms=[V.J])], (R.attention(V.I) <= (R.weights(V.I, V.J), R.v(V.J)) | [F.product]
Dalam PyNeuraLogic, kita boleh menangkap sepenuhnya mekanisme perhatian melalui peraturan logik di atas. Peraturan pertama mewakili pengiraan berat - ia mengira hasil darab punca kuasa dua songsang bagi dimensi dan vektor kunci ke-j tertranspos dan vektor pertanyaan ke-i. Seterusnya, kami menggunakan fungsi softmax untuk mengagregatkan keputusan i dengan semua kemungkinan j.
Peraturan kedua kemudian mengira produk antara vektor berat ini dan vektor nilai ke-j yang sepadan, dan menjumlahkan keputusan untuk j yang berbeza untuk setiap token ke-i.
4. Attention Masking
Semasa latihan dan penilaian, kami sering mengehadkan perkara yang boleh disertai oleh token input. Sebagai contoh, kami ingin mengehadkan penanda untuk melihat ke hadapan dan menumpukan pada perkataan yang akan datang. Rangka kerja popular, seperti PyTorch, mencapai ini dengan menutup, iaitu menetapkan subset unsur hasil produk titik berskala kepada beberapa nombor negatif yang sangat rendah. Nombor ini menyatakan bahawa fungsi softmax terpaksa menetapkan berat pasangan tag yang sepadan kepada sifar.
(R.weights(V.I, V.J) <= ( R.d_k, R.k(V.J).T, R.q(V.I), R.special.leq(V.J, V.I) )) | [F.product, F.softmax_agg(agg_terms=[V.J])],
Kita boleh mencapai ini dengan mudah dengan menambahkan kekangan perhubungan badan pada simbol kita. Kami mengekang penunjuk ke-i untuk lebih besar daripada atau sama dengan penunjuk ke-j untuk mengira berat. Berbeza dengan topeng, kami hanya mengira produk titik berskala yang diperlukan.
5. Perhatian bukan standard
Sudah tentu, "penutup" simbolik boleh menjadi sewenang-wenangnya. Kebanyakan orang pernah mendengar tentang GPT-3⁴ berasaskan transformer jarang, atau aplikasinya seperti ChatGPT. ⁵ Perhatian (versi langkah) pengubah jarang mempunyai dua jenis kepala perhatian:
一个只关注前 n 个标记 (0 ≤ i − j ≤ n)
一个只关注每第 n 个前一个标记 ((i − j) % n = 0)
两种类型的头的实现都只需要微小的改变(例如,对于 n = 5)。
(R.weights(V.I, V.J) <= ( R.d_k, R.k(V.J).T, R.q(V.I), R.special.leq(V.D, 5), R.special.sub(V.I, V.J, V.D), )) | [F.product, F.softmax_agg(agg_terms=[V.J])],
(R.weights(V.I, V.J) <= ( R.d_k, R.k(V.J).T, R.q(V.I), R.special.mod(V.D, 5, 0), R.special.sub(V.I, V.J, V.D), )) | [F.product, F.softmax_agg(agg_terms=[V.J])],
我们可以进一步推进,将类似图形输入的注意力概括到关系注意力的程度。⁶ 这种类型的注意力在图形上运行,其中节点只关注它们的邻居(由边连接的节点)。结果是节点向量嵌入和边嵌入的键 K、查询 Q 和值 V 相加。
(R.weights(V.I, V.J) <= (R.d_k, R.k(V.I, V.J).T, R.q(V.I, V.J))) | [F.product, F.softmax_agg(agg_terms=[V.J])], (R.attention(V.I) <= (R.weights(V.I, V.J), R.v(V.I, V.J)) | [F.product], R.q(V.I, V.J) <= (R.n(V.I)[W_qn], R.e(V.I, V.J)[W_qe]), R.k(V.I, V.J) <= (R.n(V.J)[W_kn], R.e(V.I, V.J)[W_ke]), R.v(V.I, V.J) <= (R.n(V.J)[W_vn], R.e(V.I, V.J)[W_ve]),
在我们的示例中,这种类型的注意力与之前展示的点积缩放注意力几乎相同。唯一的区别是添加了额外的术语来捕获边缘。将图作为注意力机制的输入似乎很自然,这并不奇怪,因为 Transformer 是一种图神经网络,作用于完全连接的图(未应用掩码时)。在传统的张量表示中,这并不是那么明显。
6. Encoder
现在,当我们展示 Attention 机制的实现时,构建整个 transformer 编码器块的缺失部分相对简单。
如何在 Relational Attention 中实现嵌入已经为我们所展现。对于传统的 Transformer,嵌入将非常相似。我们将输入向量投影到三个嵌入向量中——键、查询和值。
R.q(V.I) <= R.input(V.I)[W_q], R.k(V.I) <= R.input(V.I)[W_k], R.v(V.I) <= R.input(V.I)[W_v],
查询嵌入通过跳过连接与注意力的输出相加。然后将生成的向量归一化并传递到多层感知器 (MLP)。
(R.norm1(V.I) <= (R.attention(V.I), R.q(V.I))) | [F.norm],
对于 MLP,我们将实现一个具有两个隐藏层的全连接神经网络,它可以优雅地表达为一个逻辑规则。
(R.mlp(V.I)[W_2] <= (R.norm(V.I)[W_1])) | [F.relu],
最后一个带有规范化的跳过连接与前一个相同。
(R.norm2(V.I) <= (R.mlp(V.I), R.norm1(V.I))) | [F.norm],
所有构建 Transformer 编码器所需的组件都已经被构建完成。解码器使用相同的组件;因此,其实施将是类似的。让我们将所有块组合成一个可微分逻辑程序,该程序可以嵌入到 Python 脚本中并使用 PyNeuraLogic 编译到神经网络中。
R.q(V.I) <= R.input(V.I)[W_q], R.k(V.I) <= R.input(V.I)[W_k], R.v(V.I) <= R.input(V.I)[W_v], R.d_k[1 / math.sqrt(embed_dim)], (R.weights(V.I, V.J) <= (R.d_k, R.k(V.J).T, R.q(V.I))) | [F.product, F.softmax_agg(agg_terms=[V.J])], (R.attention(V.I) <= (R.weights(V.I, V.J), R.v(V.J)) | [F.product], (R.norm1(V.I) <= (R.attention(V.I), R.q(V.I))) | [F.norm], (R.mlp(V.I)[W_2] <= (R.norm(V.I)[W_1])) | [F.relu], (R.norm2(V.I) <= (R.mlp(V.I), R.norm1(V.I))) | [F.norm],
Atas ialah kandungan terperinci Seni bina Python analisis kod sumber PyNeuraLogic. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Tomergelistsinpython, operator youCanusethe, extendmethod, listcomprehension, oritertools.chain, eachwithspecificadvantages: 1) operatorSimpleButlessefficientficorlargelists;

Dalam Python 3, dua senarai boleh disambungkan melalui pelbagai kaedah: 1) Pengendali penggunaan, yang sesuai untuk senarai kecil, tetapi tidak cekap untuk senarai besar; 2) Gunakan kaedah Extend, yang sesuai untuk senarai besar, dengan kecekapan memori yang tinggi, tetapi akan mengubah suai senarai asal; 3) menggunakan * pengendali, yang sesuai untuk menggabungkan pelbagai senarai, tanpa mengubah suai senarai asal; 4) Gunakan itertools.chain, yang sesuai untuk set data yang besar, dengan kecekapan memori yang tinggi.

Menggunakan kaedah Join () adalah cara yang paling berkesan untuk menyambungkan rentetan dari senarai di Python. 1) Gunakan kaedah Join () untuk menjadi cekap dan mudah dibaca. 2) Kitaran menggunakan pengendali tidak cekap untuk senarai besar. 3) Gabungan pemahaman senarai dan menyertai () sesuai untuk senario yang memerlukan penukaran. 4) Kaedah mengurangkan () sesuai untuk jenis pengurangan lain, tetapi tidak cekap untuk penyambungan rentetan. Kalimat lengkap berakhir.

PythonexecutionistheprocessoftransformingpythoncodeIntoExecutableInstructions.1) TheinterpreterreadsTheCode, convertingIntoByteCode, yang mana -mana

Ciri -ciri utama Python termasuk: 1. Sintaks adalah ringkas dan mudah difahami, sesuai untuk pemula; 2. Sistem jenis dinamik, meningkatkan kelajuan pembangunan; 3. Perpustakaan standard yang kaya, menyokong pelbagai tugas; 4. Komuniti dan ekosistem yang kuat, memberikan sokongan yang luas; 5. Tafsiran, sesuai untuk skrip dan prototaip cepat; 6. Sokongan multi-paradigma, sesuai untuk pelbagai gaya pengaturcaraan.

Python adalah bahasa yang ditafsirkan, tetapi ia juga termasuk proses penyusunan. 1) Kod python pertama kali disusun ke dalam bytecode. 2) Bytecode ditafsirkan dan dilaksanakan oleh mesin maya Python. 3) Mekanisme hibrid ini menjadikan python fleksibel dan cekap, tetapi tidak secepat bahasa yang disusun sepenuhnya.

UseAforLoopWheniteratingOvereForforpecificNumbimes; Useaphileloopwhencontinuinguntilaconditionismet.forloopsareidealforknownownsequences, sementara yang tidak digunakan.

Pythonloopscanleadtoerrorslikeinfiniteloops, pengubahsuaianListsduringiteration, off-by-oneerrors, sifar-indexingissues, andnestedloopinefficies.toavoidthese: 1) use'i


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa
