Bỏ qua

Học Sâu Hình Học (Geometric Deep Learning)

Học sâu hình học (geometric deep learning) là khuôn khổ thống nhất tiết lộ rằng CNN, transformer, và GNN đều là những trường hợp của cùng một nguyên lý: khai thác tính đối xứng (symmetry). File này bao gồm các nhóm đối xứng (symmetry groups), tác động nhóm (group actions), tính bất biến (invariance), tính tương đẳng (equivariance), năm miền hình học, và sự tách biệt tỷ lệ (scale separation).

  • Xuyên suốt cuốn sách này, chúng ta đã nghiên cứu nhiều kiến trúc: CNN cho ảnh (chương 8), transformer cho ngôn ngữ (chương 7), và các chính sách RL cho quyết định tuần tự (chương 6). Nhìn sơ qua, chúng giống như những mô hình hoàn toàn khác nhau được thiết kế cho các vấn đề hoàn toàn khác nhau. Nhưng có một khuôn mẫu sâu sắc hơn.

  • Học sâu hình học tiết lộ rằng tất cả các kiến trúc này đều là trường hợp của cùng một ý tưởng: xây dựng mạng tôn trọng các đối xứng (symmetries) của dữ liệu. CNN khai thác đối xứng tịnh tiến trong ảnh. Transformer khai thác đối xứng hoán vị trong chuỗi (cơ chế chú ý không phụ thuộc vào vị trí tuyệt đối). GNN khai thác đối xứng hoán vị trong đồ thị. Một khi bạn thấy điều này, sở thú các kiến trúc trở thành một khuôn khổ duy nhất, mạch lạc.

Đối Xứng và Nhóm (Symmetry and Groups)

  • Một đối xứng (symmetry) của một đối tượng là một phép biến đổi giữ cho đối tượng không đổi. Một hình vuông có 8 đối xứng: 4 phép quay (0°, 90°, 180°, 270°) và 4 phép phản chiếu. Một hình tròn có vô hạn đối xứng: bất kỳ phép quay nào quanh tâm của nó. Ý tưởng chính là đối xứng cho bạn biết điều gì không quan trọng, và biết điều gì không quan trọng là cực kỳ mạnh mẽ cho việc học.

  • Theo ngôn ngữ ML: nếu một tác vụ có một đối xứng, mô hình nên cho cùng câu trả lời bất kể "phiên bản" nào của đầu vào nó thấy. Một bộ phát hiện mèo nên hoạt động dù con mèo ở góc trên bên trái hay góc dưới bên phải của ảnh. Đó là đối xứng tịnh tiến.

  • Các đối xứng được hình thức hóa dưới dạng nhóm (groups). Một nhóm \(G\) là một tập các phép biến đổi với bốn tính chất:

    • Tính đóng (Closure): kết hợp hai phép biến đổi cho một phép biến đổi khác trong tập. Quay 90° rồi 90° cho 180°, cũng nằm trong tập.
    • Tính kết hợp (Associativity): \((g_1 \circ g_2) \circ g_3 = g_1 \circ (g_2 \circ g_3)\). Thứ tự nhóm không quan trọng (nhắc lại tính kết hợp của phép nhân ma trận từ chương 2).
    • Phần tử đơn vị (Identity): có một phép biến đổi "không làm gì" \(e\) sao cho \(e \circ g = g \circ e = g\).
    • Phần tử nghịch đảo (Inverse): mọi phép biến đổi đều có phép hoàn tác: \(g \circ g^{-1} = e\).
  • Đây là cùng các tiên đề như không gian vector (chương 1) nhưng dành cho các phép biến đổi thay vì vector. Mối liên hệ rất sâu sắc: các nhóm tác động lên không gian vector, và tác động này là thứ mà mạng nơ-ron phải tôn trọng.

  • Các nhóm chính xuất hiện trong học sâu:

    • Nhóm tịnh tiến (Translation group) \((\mathbb{R}^n, +)\): dịch chuyển ảnh hoặc tín hiệu. Đây là đối xứng mà CNN khai thác.
    • Nhóm đối xứng (Symmetric group) \(S_n\): tất cả các hoán vị của \(n\) phần tử. Đây là đối xứng mà GNN và transformer khai thác (sắp xếp lại các nút hoặc token không nên thay đổi kết quả).
    • Nhóm quay (Rotation group) \(SO(n)\): tất cả các phép quay trong không gian \(n\) chiều. \(SO(2)\) là các phép quay trong mặt phẳng, \(SO(3)\) là các phép quay trong 3D (quan trọng cho các tác vụ phân tử và thị giác 3D).
    • Nhóm Euclid (Euclidean group) \(E(n)\): tất cả các phép quay, phản chiếu, và tịnh tiến. Đối xứng của không gian vật lý.
    • Nhóm Euclid đặc biệt (Special Euclidean group) \(SE(n)\): các phép quay và tịnh tiến (không có phản chiếu). Đối xứng của chuyển động vật rắn.
  • Một tác động nhóm (group action) mô tả cách một nhóm biến đổi dữ liệu. Nếu \(G\) là một nhóm và \(X\) là một không gian dữ liệu, tác động \(\rho: G \times X \to X\) ánh xạ mỗi phần tử nhóm \(g\) và điểm dữ liệu \(x\) đến một điểm đã biến đổi \(\rho(g, x)\). Với ảnh, nhóm tịnh tiến tác động bằng cách dịch chuyển tọa độ pixel. Với đồ thị, nhóm đối xứng tác động bằng cách gán lại nhãn các nút.

Tính Bất Biến và Tính Tương Đẳng (Invariance and Equivariance)

  • Với một nhóm đối xứng, một hàm có thể liên quan đến nó theo hai cách quan trọng:

  • Một hàm \(f\)bất biến (invariant) đối với nhóm \(G\) nếu đầu ra không thay đổi khi đầu vào bị biến đổi:

\[f(\rho(g, x)) = f(x) \quad \text{với mọi } g \in G\]
  • Ví dụ: tổng độ sáng của một ảnh không thay đổi nếu bạn dịch chuyển ảnh. Phân lớp ảnh nên bất biến với tịnh tiến: lớp "mèo" là giống nhau bất kể mèo ở đâu.

  • Một hàm \(f\)tương đẳng (equivariant) đối với \(G\) nếu biến đổi đầu vào sẽ biến đổi đầu ra theo cách tương ứng:

\[f(\rho_{\text{in}}(g, x)) = \rho_{\text{out}}(g, f(x)) \quad \text{với mọi } g \in G\]
  • Ví dụ: nếu bạn dịch chuyển ảnh sang phải 5 pixel, bản đồ đặc trưng (feature map) trong CNN cũng dịch phải 5 pixel. Phép tích chập là tương đẳng với tịnh tiến: nó bảo toàn mối quan hệ không gian. Phát hiện đối tượng nên tương đẳng: nếu con mèo di chuyển, hộp giới hạn (bounding box) nên di chuyển theo.

Bất biến: đầu ra giữ nguyên bất kể phép biến đổi. Tương đẳng: đầu ra biến đổi tương ứng

  • Sự khác biệt quan trọng: các tầng trung gian thường nên tương đẳng (bảo toàn cấu trúc cho các tầng phía sau), trong khi đầu ra cuối cùng nên bất biến (câu trả lời không nên phụ thuộc vào phép biến đổi). Một CNN đạt được điều này bằng cách xếp chồng các tầng tích chập tương đẳng, sau đó áp dụng gộp toàn cục (global pooling) (bất biến) ở cuối.

  • Xây dựng tính tương đẳng vào kiến trúc hiệu quả hơn nhiều so với việc học nó từ dữ liệu. Một CNN tương đẳng với tịnh tiến có chia sẻ trọng số cần ít tham số hơn nhiều so với một mạng kết nối đầy đủ phải tự học "'mèo ở vị trí (10,10)'" và "'mèo ở vị trí (200,150)'" một cách độc lập. Ràng buộc đối xứng giảm không gian giả thuyết một cách mũ.

Năm Miền Hình Học (The Five Geometric Domains)

  • Học sâu hình học xác định năm miền cơ bản của dữ liệu, mỗi miền có nhóm đối xứng riêng. Mọi kiến trúc mạng nơ-ron đều có thể được hiểu là khai thác đối xứng của một trong những miền này.

Năm miền hình học: lưới (grids), tập hợp (sets), chuỗi (sequences), đồ thị (graphs), và đa tạp (manifolds), mỗi miền có đối xứng và kiến trúc riêng

  • 1. Lưới (Grids — dữ liệu Euclid): ảnh, phổ âm thanh (spectrograms), dữ liệu thể tích. Cấu trúc cơ bản là một lưới đều với đối xứng tịnh tiến. Nhóm là nhóm tịnh tiến (cộng thêm có thể quay và phản chiếu). Kiến trúc khai thác đối xứng này là CNN: tích chập chính xác là phép toán tương đẳng với tịnh tiến. Chia sẻ trọng số trên các vị trí không gian là tính tương đẳng với tịnh tiến được hiện thực hóa.

  • 2. Tập hợp (Sets — bộ sưu tập không thứ tự): đám mây điểm, hệ hạt. Đối xứng là bất biến hoán vị: thứ tự các phần tử không quan trọng. Kiến trúc là DeepSets (và PointNet từ chương 8): áp dụng một hàm chia sẻ lên mỗi phần tử, sau đó gộp bằng một phép toán bất biến với hoán vị (tổng, trung bình, hoặc max). Một cách hình thức, \(f(\{x_1, \ldots, x_n\}) = \phi\left(\sum_i \psi(x_i)\right)\).

  • 3. Chuỗi (Sequences — dữ liệu có thứ tự): văn bản, chuỗi thời gian. Chuỗi là lưới trong 1D, nhưng có một sự tinh tế: đối xứng tinh tế hơn. Vị trí tuyệt đối có thể quan trọng hoặc không. RNN xử lý chuỗi theo kiểu tự hồi quy. Transformer với mã hóa vị trí (positional encodings) có thể chú ý đến bất kỳ vị trí nào, và cơ chế tự chú ý (self-attention) của chúng là tương đẳng với hoán vị (trước khi thêm mã hóa vị trí). Đây là lý do transformer tổng quát hóa tốt: chúng bắt đầu tương đẳng với hoán vị và chỉ thêm đủ cấu trúc vị trí.

  • 4. Đồ thị (Graphs — dữ liệu quan hệ): mạng xã hội, phân tử, đồ thị tri thức. Đối xứng là hoán vị các nút: gán lại nhãn các nút không nên thay đổi các tính chất của đồ thị. Kiến trúc là GNN: truyền thông điệp (message passing) giữa các nút kết nối, dùng các hàm chia sẻ không phụ thuộc vào thứ tự các nút. Đây là trọng tâm của phần còn lại của chương này.

  • 5. Đa tạp và lưới (Manifolds and meshes): bề mặt, hình dạng 3D. Đối xứng bao gồm các vi phôi (diffeomorphisms — biến dạng trơn). Kiến trúc dùng các toán tử nội tại (ví dụ: Laplace-Beltrami) được định nghĩa bởi chính hình học bề mặt, độc lập với cách bề mặt được nhúng trong không gian. Điều này kết nối với hình học vi phân và có liên quan đến phân tích hình dạng, mô hình hóa khí hậu trên mặt cầu, và phân tích bề mặt protein.

  • Sức mạnh của khuôn khổ này là sự thống nhất. Một CNN là một GNN trên đồ thị lưới. Một transformer là một GNN trên đồ thị đầy đủ. DeepSets là một GNN không có cạnh. Nhìn thấy những điều này như các trường hợp của cùng một nguyên lý hướng dẫn thiết kế các kiến trúc mới: xác định đối xứng của dữ liệu của bạn, và xây dựng một mạng tôn trọng nó.

Tách Biệt Tỷ Lệ và Coarsening (Scale Separation and Coarsening)

  • Dữ liệu thế giới thực có cấu trúc ở nhiều tỷ lệ. Một ảnh có kết cấu mịn (cấp pixel), các mẫu cục bộ (cạnh, góc), các bộ phận đối tượng (bánh xe, cửa sổ), và cấu trúc toàn cục (toàn bộ cảnh). Một phân tử có các đặc trưng cấp nguyên tử, các nhóm chức năng, và hình dạng phân tử tổng thể.

  • Tách biệt tỷ lệ (scale separation) là nguyên lý rằng các mức độ chi tiết này có thể được xử lý theo thứ bậc: trước tiên nắm bắt cấu trúc cục bộ, sau đó dần dần gộp vào các biểu diễn thô hơn. Đây là coarsening hoặc pooling.

  • Trong CNN, các tầng gộp (pooling — max pooling, average pooling) giảm độ phân giải không gian, buộc các tầng cao hơn nắm bắt các mẫu tỷ lệ lớn hơn. Theo quan điểm trường tiếp nhận (chương 8), các tầng sâu hơn "'nhìn"' nhiều hơn của ảnh. Đây là tách biệt tỷ lệ trong hành động.

  • Trong đồ thị, coarsening nghĩa là gom nhóm các nút thành "'các siêu nút (supernodes),"', tạo ra một đồ thị nhỏ hơn bảo toàn cấu trúc thiết yếu. Đây là graph pooling, chúng ta sẽ trình bày chi tiết trong file 3. Sự tương tự với image pooling là trực tiếp: giảm độ phân giải trong khi bảo toàn các đặc trưng quan trọng.

  • Trong chuỗi, xử lý theo thứ bậc (ví dụ: câu → đoạn → tài liệu) nắm bắt cấu trúc ở các tỷ lệ thời gian hoặc ngữ nghĩa khác nhau. Swin Transformer (chương 8) áp dụng ý tưởng này cho ảnh với hệ thống phân cấp cửa sổ dịch chuyển của nó.

  • Về mặt toán học, coarsening định nghĩa một hệ thống phân cấp các biểu diễn ngày càng trừu tượng:

\[x \xrightarrow{\text{đặc trưng cục bộ}} h^{(1)} \xrightarrow{\text{coarsen}} h^{(2)} \xrightarrow{\text{coarsen}} \cdots \xrightarrow{\text{toàn cục}} y\]
  • Ở mỗi cấp, biểu diễn là tương đẳng với nhóm đối xứng của cấp đó. Biểu diễn toàn cục cuối cùng là bất biến, nắm bắt tinh túy của đầu vào mà không nhạy cảm với các phép biến đổi không liên quan.

  • Hệ thống phân cấp này là lý do các mạng sâu hoạt động tốt hơn mạng nông cho dữ liệu có cấu trúc: mỗi tầng thêm một mức trừu tượng, và sự kết hợp của nhiều tầng tương đẳng xây dựng các đặc trưng bất biến phức tạp từ các đặc trưng cục bộ đơn giản.

Bài tập lập trình (dùng CoLab hoặc notebook)

  1. Kiểm tra tính tương đẳng với tịnh tiến của tích chập. Áp dụng tích chập lên một ảnh, sau đó dịch chuyển ảnh và tích chập lại. Kiểm tra rằng các đầu ra là các phiên bản đã dịch chuyển của nhau.

    import jax
    import jax.numpy as jnp
    
    # 1D signal and a simple filter
    signal = jnp.array([0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0], dtype=float)
    kernel = jnp.array([1, 0, -1], dtype=float)
    
    # Convolve then shift
    conv_result = jnp.convolve(signal, kernel, mode="same")
    shifted_signal = jnp.roll(signal, 3)
    conv_shifted = jnp.convolve(shifted_signal, kernel, mode="same")
    shifted_conv = jnp.roll(conv_result, 3)
    
    print(f"Conv then shift:  {shifted_conv}")
    print(f"Shift then conv:  {conv_shifted}")
    print(f"Equivariant: {jnp.allclose(shifted_conv, conv_shifted, atol=1e-5)}")
    

  2. Kiểm tra tính bất biến hoán vị của gộp kiểu DeepSets. Áp dụng một hàm chia sẻ lên mỗi phần tử của một tập hợp, tính tổng kết quả, và kiểm tra rằng đầu ra giống nhau bất kể thứ tự phần tử.

    import jax
    import jax.numpy as jnp
    
    # A "set" of 4 vectors (order should not matter)
    x = jnp.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
    
    # Simple shared function: element-wise square
    psi = lambda v: v ** 2
    
    # Aggregate by sum
    def deepsets(points):
        return jnp.sum(jax.vmap(psi)(points), axis=0)
    
    # Original order
    result1 = deepsets(x)
    
    # Permuted order
    perm = jnp.array([2, 0, 3, 1])
    result2 = deepsets(x[perm])
    
    print(f"Original order:  {result1}")
    print(f"Permuted order:  {result2}")
    print(f"Invariant: {jnp.allclose(result1, result2)}")
    

  3. Khám phá cấu trúc nhóm. Kiểm tra rằng các ma trận quay 2D tạo thành một nhóm bằng cách kiểm tra tính đóng, kết hợp, phần tử đơn vị, và nghịch đảo.

    import jax.numpy as jnp
    
    def rot2d(theta):
        return jnp.array([[jnp.cos(theta), -jnp.sin(theta)],
                           [jnp.sin(theta),  jnp.cos(theta)]])
    
    R1 = rot2d(jnp.pi / 6)
    R2 = rot2d(jnp.pi / 4)
    R3 = rot2d(jnp.pi / 3)
    
    # Closure: product of two rotations is a rotation
    R12 = R1 @ R2
    print(f"Closure (det=1, orthogonal): det={jnp.linalg.det(R12):.4f}, "
          f"R^T R = I: {jnp.allclose(R12.T @ R12, jnp.eye(2), atol=1e-5)}")
    
    # Associativity
    print(f"Associative: {jnp.allclose((R1 @ R2) @ R3, R1 @ (R2 @ R3), atol=1e-5)}")
    
    # Identity
    I = rot2d(0.0)
    print(f"Identity: {jnp.allclose(R1 @ I, R1, atol=1e-5)}")
    
    # Inverse
    R1_inv = rot2d(-jnp.pi / 6)
    print(f"Inverse: {jnp.allclose(R1 @ R1_inv, jnp.eye(2), atol=1e-5)}")