Cách mạng nơ-ron xây dựng hiểu biết của chúng về hình ảnh
Ngày càng có nhiều lý do để yêu cầu mạng nơ-ron phải diễn giải được với con người. Lĩnh vực diễn giải mạng nơ-ron ra đời từ nhu cầu đó. Khi trưởng thành, lĩnh vực này đang phát triển nhiều công cụ để nhìn vào bên trong mô hình.
Bài viết này tập trung vào trực quan hóa đặc trưng. Đây là một công cụ mạnh, nhưng để dùng tốt cần nhiều chi tiết kỹ thuật. Chúng ta sẽ xem tối ưu hóa tạo hình ảnh như thế nào, vì sao nó dễ sinh nhiễu, và những thủ thuật nào làm kết quả đáng tin hơn.
Nói chung, mạng nơ-ron khả vi theo đầu vào. Nếu muốn biết loại đầu vào nào gây ra một hành vi nào đó, ta có thể tối ưu trực tiếp đầu vào để làm hành vi đó mạnh lên.
Ý tưởng rất đơn giản, nhưng thực hành có nhiều bẫy. Phần sau sẽ đi qua các bẫy đó và những cách phổ biến để xử lý chúng.
Ta muốn ví dụ cho điều gì? Đây là câu hỏi cốt lõi, dù ta tìm ví dụ trong dataset hay tạo ví dụ bằng tối ưu hóa ảnh.
Các mục tiêu tối ưu khác nhau cho thấy những phần khác nhau của mạng đang tìm kiếm điều gì.
n là chỉ số layer; x,y là vị trí không gian; z là chỉ số kênh; k là chỉ số lớp.
layern[x,y,z]
layern[:,:,z]
layern[:,:,:]2
pre_softmax[k]
softmax[k]Nếu muốn hiểu từng đặc trưng riêng lẻ, ta có thể tìm các ví dụ làm đặc trưng đó có giá trị cao: một neuron tại vị trí cụ thể, hoặc cả một channel.
Nếu muốn hiểu toàn bộ một layer, ta có thể dùng mục tiêu kiểu DeepDream, tìm những ảnh mà layer đó thấy “thú vị”.
Với lớp đầu ra của một bộ phân loại, ta có hai lựa chọn: tối ưu logit trước softmax hoặc tối ưu xác suất sau softmax.
Những mục tiêu này mới chỉ là phần nổi. Có rất nhiều mục tiêu khác có thể thử, đặc biệt là các mục tiêu trong style transfer.
Tối ưu hóa cho ta một đầu vào ví dụ gây ra hành vi mong muốn. Nhưng vì sao phải làm vậy? Tại sao không chỉ tìm ví dụ trong dataset?
Cách tối ưu hóa có thể giúp hiểu mô hình thật sự đang tìm gì, vì nó tách những yếu tố gây ra hành vi khỏi các yếu tố chỉ tình cờ đi kèm trong dữ liệu.
Tối ưu hóa cũng rất linh hoạt. Ta có thể hỏi một ví dụ sẽ thay đổi ra sao nếu đồng thời kích hoạt nhiều neuron, hoặc nếu đi theo một hướng bất kỳ trong không gian kích hoạt.
Ngược lại, trực quan hóa bằng tối ưu hóa cũng có thách thức lớn: cần tạo kết quả đa dạng và tránh những ảnh tối ưu hóa “lừa” mạng bằng nhiễu.
Các ví dụ của ta có cho thấy toàn cảnh không? Khi tạo ví dụ bằng tối ưu hóa, đây là điều cần đặc biệt cẩn thận.
Ví dụ từ dataset có lợi thế lớn: chúng có thể đa dạng tự nhiên. Ta không chỉ thấy những ảnh kích hoạt mạnh nhất, mà còn thấy bối cảnh và biến thể thực.
Tối ưu hóa thường chỉ cho một ví dụ cực dương, và nếu cố tình, một ví dụ cực âm. Câu hỏi là liệu tối ưu hóa có thể cho nhiều ví dụ khác nhau hay không.
Một đặc trưng trong mạng có thể phản hồi với rất nhiều đầu vào. Ở mức lớp, bộ phân loại chó nên nhận cả chó nhỏ lẫn chó lớn, nhiều giống và nhiều tư thế.
Một hướng khác là tìm các ví dụ đa dạng trong dataset rồi dùng chúng làm điểm khởi đầu cho tối ưu hóa.
Chúng tôi thấy có một cách rất đơn giản để tạo đa dạng: thêm một hạng đa dạng vào mục tiêu. Trong bài này, cách làm dựa trên trực giác từ style transfer.
Ở các neuron tầng thấp, hạng đa dạng có thể hé lộ nhiều mặt khác nhau của một đặc trưng.
Các trực quan hóa đa dạng giúp ta khoanh vùng chính xác hơn điều gì kích hoạt neuron, rồi đối chiếu dự đoán đó với ví dụ thật trong dataset.
Ví dụ, hãy xem một kết quả tối ưu hóa đơn giản.
Tối ưu hóa đơn giản. Nếu nhìn riêng lẻ, ta có thể đoán neuron này kích hoạt bởi phần trên đầu chó; nhưng các ví dụ đa dạng và dataset cho thấy câu chuyện tinh tế hơn.
Ở neuron tầng cao, đa dạng còn rõ hơn: cùng một neuron có thể phản hồi với nhiều loại đối tượng khác nhau.
Cách đơn giản này có vài hạn chế. Áp lực làm các ví dụ khác nhau có thể tạo ra nhiễu không liên quan, và không bảo đảm ta tìm được mọi khía cạnh quan trọng.
Tính đa dạng cũng chạm tới vấn đề sâu hơn: có những neuron biểu diễn các hỗn hợp ý tưởng kỳ lạ, không tương ứng với một khái niệm con người rõ ràng.
Những ví dụ như vậy gợi ý rằng neuron riêng lẻ không nhất thiết là đơn vị ngữ nghĩa đúng để hiểu mạng nơ-ron.
Nếu neuron không phải đơn vị đúng, ta nên nhìn gì? Trong thực tế, tổ hợp neuron cùng biểu diễn ảnh. Một cách hữu ích là xem mọi hướng trong không gian kích hoạt như một đặc trưng tiềm năng.
Cách nhìn này thống nhất “neuron” và “tổ hợp neuron” thành “vector trong không gian kích hoạt”. Nó cho phép ta hỏi liệu các trục cơ sở có đặc biệt hơn các hướng khác hay không.
Szegedy và cộng sự nhận thấy các hướng ngẫu nhiên có vẻ cũng có nghĩa như hướng của neuron riêng lẻ. Các nghiên cứu sau cho thấy câu chuyện còn phụ thuộc vào layer và mô hình.
Ví dụ dataset và ví dụ tối ưu hóa cho các hướng ngẫu nhiên trong không gian kích hoạt. Các hướng ở đây được chọn thủ công vì dễ diễn giải.
Ta cũng có thể tạo hướng thú vị bằng phép toán trên neuron. Ví dụ, cộng một neuron “đen trắng” với một neuron “khảm” có thể cho ra hướng biểu diễn khái niệm kết hợp.
Tối ưu hóa đồng thời hai neuron giúp ta thấy chúng tương tác như thế nào.
Những ví dụ này cho thấy neuron cùng nhau biểu diễn hình ảnh. Ta cũng có thể nội suy giữa các neuron để quan sát quá trình chuyển đổi mượt giữa các đặc trưng.
Đây mới chỉ là điểm khởi đầu. Ta vẫn biết rất ít về cách chọn các hướng có nghĩa, hay liệu có một hệ tọa độ tốt hơn cho không gian kích hoạt hay không.
Nếu muốn trực quan hóa đặc trưng, trực giác đầu tiên là tối ưu ảnh để neuron phát mạnh. Không may, làm vậy trực tiếp thường không hiệu quả.
Ngay cả khi chỉnh learning rate cẩn thận, kết quả vẫn có nhiễu.
Các kết quả tối ưu hóa được phóng to để thấy rõ chi tiết và artifact.
Những mẫu này giống như ảnh đang “gian lận”, tìm cách kích hoạt neuron bằng cấu trúc không xuất hiện trong ảnh thật.
Chúng ta chưa hiểu hoàn toàn vì sao các mẫu tần số cao này hình thành, nhưng convolution có stride và pooling đóng vai trò quan trọng vì chúng tạo cấu trúc bàn cờ trong gradient.
Nhiễu tần số cao cho thấy tự do của tối ưu hóa vừa hấp dẫn vừa nguy hiểm. Nếu không ràng buộc, ảnh có thể đi vào những vùng không tự nhiên nhưng vẫn kích hoạt mạng.
Xử lý nhiễu tần số cao là một chủ đề xuyên suốt trong nghiên cứu trực quan hóa đặc trưng.
Hầu hết các bài đáng chú ý trong lĩnh vực này đều đề xuất một dạng chính quy hóa nào đó. Các kỹ thuật khác nhau đặt ra những ràng buộc khác nhau về ảnh được phép xuất hiện.
Có thể xem các phương pháp này nằm trên một phổ. Không chính quy hóa thì ảnh dễ trở thành artifact; chính quy hóa quá mạnh thì ảnh giống thật hơn nhưng có thể phản ánh tương quan đánh lừa.
Erhan và cộng sự, 2009
Giới thiệu ý tưởng cốt lõi; chính quy hóa tối thiểu.
Szegedy và cộng sự, 2013
Ví dụ đối kháng; trực quan hóa bằng ví dụ trong dataset.
Mahendran & Vedaldi, 2015
Giới thiệu regularizer total variation; tái dựng đầu vào từ biểu diễn.
Nguyen và cộng sự, 2015
Khảo sát phản ví dụ; giới thiệu làm mờ ảnh.
Mordvintsev và cộng sự, 2015
Giới thiệu jitter và đa tỉ lệ; thử prior GMM cho lớp.
Øygard và cộng sự, 2015
Giới thiệu làm mờ gradient; cũng dùng jitter.
Tyka và cộng sự, 2016
Chính quy hóa bằng bilateral filter; cũng dùng jitter.
Mordvintsev và cộng sự, 2016
Chuẩn hóa tần số gradient; cũng dùng jitter.
Nguyen và cộng sự, 2016
Tham số hóa ảnh bằng bộ sinh GAN.
Nguyen và cộng sự, 2016
Dùng prior autoencoder khử nhiễu để tạo mô hình sinh.
Hãy xem kỹ hơn ba nhóm chính quy hóa trung gian.
Phạt tần số nhắm trực tiếp vào nhiễu tần số cao. Nó có thể phạt chênh lệch giữa pixel lân cận hoặc làm giảm các thành phần tần số cao.
Một số công trình dùng kỹ thuật tương tự để giảm tần số cao trong gradient trước khi chúng tích lũy vào ảnh.
Phạt tần số nhắm trực tiếp vào nhiễu tần số cao.
Độ bền với biến đổi tìm các ví dụ vẫn kích hoạt mục tiêu mạnh ngay cả khi ảnh bị dịch, xoay, phóng to hoặc biến đổi nhẹ.
Biến đổi ngẫu nhiên ảnh trước bước tối ưu giúp triệt nhiễu.
Prior học được: các regularizer trước chỉ là heuristic đơn giản. Bước tự nhiên tiếp theo là học mô hình của dữ liệu thật và buộc ảnh tối ưu nằm gần phân phối đó.
Một cách là học bộ sinh ánh xạ từ không gian tiềm ẩn sang ảnh dữ liệu, như GAN hoặc VAE, rồi tối ưu trong không gian tiềm ẩn. Cách khác là dùng prior autoencoder.
Ở phần trước, một số phương pháp giảm tần số cao trong gradient thay vì trong ảnh. Điều này không hẳn là chính quy hóa; nó thay đổi hình học của tối ưu hóa.
Biến đổi gradient như vậy là một công cụ mạnh, trong tối ưu hóa gọi là tiền điều kiện. Nó tương đương chọn một thước đo khác cho hướng xuống dốc nhất.
Làm sao chọn tiền điều kiện tốt? Một phỏng đoán hợp lý là làm dữ liệu bớt tương quan và được làm trắng. Với ảnh, điều này liên quan đến cấu trúc màu và tần số không gian.
Hãy xem các thước đo khoảng cách khác nhau thay đổi hướng xuống dốc nhất như thế nào.
Tất cả các hướng này đều là hướng giảm hợp lệ cho cùng mục tiêu, nhưng khác nhau rất mạnh. Tối ưu trong không gian đã khử tương quan làm giảm nhiều artifact.
Dùng hướng descent đã khử tương quan tạo ra trực quan hóa khá khác. So sánh hoàn toàn công bằng rất khó vì hyperparameter, nhưng chất lượng thường tốt hơn.
Kết hợp tiền điều kiện với độ bền biến đổi còn cải thiện chất lượng hơn nữa.
Trừ khi nói khác, các ảnh trong bài được tối ưu trong không gian đã khử tương quan cùng một bộ kỹ thuật độ bền biến đổi.
Tiền điều kiện chỉ tăng tốc đường đi đến cùng một nghiệm, hay nó cũng chính quy hóa bằng cách thay đổi nghiệm cuối? Câu trả lời thực tế là nó làm cả hai.
Trực quan hóa đặc trưng đã tiến rất xa trong vài năm gần đây. Cộng đồng đã có những phương pháp có nguyên tắc để tạo hình ảnh thuyết phục và đã hiểu rõ hơn các dạng artifact.
Trong nỗ lực làm mạng nơ-ron dễ diễn giải, trực quan hóa đặc trưng là một trong những hướng hứa hẹn và phát triển nhất. Tự nó không giải quyết mọi thứ, nhưng là công cụ nền tảng.
Vẫn còn nhiều việc quan trọng: hiểu tương tác giữa neuron, tìm đơn vị ngữ nghĩa phù hợp hơn, và làm rõ mức độ mà các hình ảnh tối ưu phản ánh hành vi thật của mạng.
Phụ lục: Trực quan hóa GoogLeNet
Trực quan hóa mọi channel trong GoogLeNet
Mã nguồn: tensorflow/lucid
Hiện thực mã nguồn mở cho các kỹ thuật trong bài
Bài tiếp theo: The Building Blocks of Interpretability
Khảo sát cách kết hợp trực quan hóa đặc trưng với các kỹ thuật khác.
We are extremely grateful to Shan Carter and Ian Goodfellow. Shan gave thoughtful feedback, especially on the design of the article. Ian generously stepped in to handle the review process of this article -- we would not have been able to publish it without him.
Chúng tôi cũng biết ơn các nhận xét, ý tưởng và sự hỗ trợ của Arvind Satyanarayan, Ian Johnson, Greg Corrado, Blaise Aguera y Arcas, Katherine Ye, Michael Nielsen, Emma Pierson, Dario Amodei, Mike Tyka, Andrea Vedaldi, Ruth Fong, Jason Freidenfelds, Geoffrey Hinton, Timon Ruban, Been Kim, Martin Wattenberg, và Fernanda Viegas.
Công trình này được hỗ trợ bởi nhiều công cụ mã nguồn mở, và chúng tôi rất biết ơn điều đó.
Đặc biệt, mọi thí nghiệm đều dựa trên Tensorflow
Đóng góp về viết, diễn giải và biểu đồ. Chris phác thảo phần lớn nội dung bài viết và tạo phiên bản đầu của hầu hết biểu đồ tương tác. Ludwig tạo các biểu đồ cộng neuron, ví dụ dataset và nội suy, đồng thời tinh chỉnh các biểu đồ khác. Ludwig cũng tạo phụ lục trực quan hóa toàn bộ GoogLeNet.
Đóng góp nghiên cứu. Đóng góp kỹ thuật lớn nhất có lẽ là phần tiền điều kiện. Trong công trình trước, Alex phát hiện rằng chuẩn hóa tần số gradient có tác động rất mạnh đến trực quan hóa neuron. Chris diễn giải lại điều này như gradient descent thích nghi trong một cơ sở khác. Cùng nhau, họ thử nhiều cách tham số hóa ảnh. Tương tự, Alex ban đầu giới thiệu hạng đa dạng, còn Chris tinh chỉnh cách dùng nó. Chris thực hiện phần khảo sát nội suy giữa các neuron.
Đóng góp hạ tầng. Mọi thí nghiệm dựa trên mã do Alex viết, một phần đã được công bố trước đó. Alex, Chris và Ludwig đều đóng góp đáng kể để tinh chỉnh thành thư viện hiện tại, Lucid. Alex và Chris giới thiệu những abstraction đặc biệt quan trọng.
Review 1 - Anonymous
Review 2 - Anonymous
Review 3 - Anonymous