18.2. Phân rã trị riêng

Trị riêng là một trong những khái niệm hữu ích nhất trong đại số tuyến tính, tuy nhiên người mới học thường bỏ qua tầm quan trọng của chúng. Dưới đây, chúng tôi sẽ giới thiệu về phân rã trị riêng (eigendecomposition) và cố gắng truyền tải tầm quan trọng của chúng.

Giả sử ta có một ma trận \(A\) sau:

(18.2.1)\[\begin{split}\mathbf{A} = \begin{bmatrix} 2 & 0 \\ 0 & -1 \end{bmatrix}.\end{split}\]

Nếu ta áp dụng \(A\) lên bất kỳ vector \(\mathbf{v} = [x, y]^\top\) nào, ta nhận được vector \(\mathbf{A}\mathbf{v} = [2x, -y]^\top\). Điều này có thể được diễn giải trực quan như sau: kéo giãn vector \(\mathbf{v}\) dài gấp đôi theo phương \(x\), rồi lấy đối xứng theo phương \(y\).

Tuy nhiên, sẽ có một vài vector với một tính chất không thay đổi. Ví dụ như \([1, 0]^\top\) được biến đổi thành \([2, 0]^\top\)\([0, 1]^\top\) được biến đổi thành \([0, -1]^\top\). Những vector này không thay đổi phương, chỉ bị kéo giãn với hệ số \(2\)\(-1\). Ta gọi những vector ấy là vector riêng và các hệ số mà chúng giãn ra là trị riêng.

Tổng quát, nếu ta tìm được một số \(\lambda\) và một vector \(\mathbf{v}\)

(18.2.2)\[\mathbf{A}\mathbf{v} = \lambda \mathbf{v}.\]

Ta nói rằng \(\mathbf{v}\) là một vector riêng và \(\lambda\) là một trị riêng của \(A\).

18.2.1. Tìm trị riêng

Hãy cùng tìm hiểu cách tìm trị riêng. Bằng cách trừ đi \(\lambda \mathbf{v}\) ở cả hai vế của đẳng thức trên, rồi sau đó nhóm thừa số chung là vector, ta có:

(18.2.3)\[(\mathbf{A} - \lambda \mathbf{I})\mathbf{v} = 0.\]

Để (18.2.3) xảy ra, \((\mathbf{A} - \lambda \mathbf{I})\) phải nén một số chiều xuống không, vì thế nó không thể nghịch đảo được nên có định thức bằng không. Do đó, ta có thể tìm các trị riêng bằng cách tìm giá trị \(\lambda\) sao cho \(\det(\mathbf{A}-\lambda \mathbf{I}) = 0\). Một khi tìm được các trị riêng, ta có thể giải phương trình \(\mathbf{A}\mathbf{v} = \lambda \mathbf{v}\) để tìm (các) vector riêng tương ứng.

18.2.1.1. Ví dụ

Hãy xét một ma trận thách thức hơn

(18.2.4)\[\begin{split}\mathbf{A} = \begin{bmatrix} 2 & 1\\ 2 & 3 \end{bmatrix}.\end{split}\]

Nếu để ý \(\det(\mathbf{A}-\lambda \mathbf{I}) = 0\), ta thấy rằng phương trình này tương đương với phương trình đa thức \(0 = (2-\lambda)(3-\lambda)-2 = (4-\lambda)(1-\lambda)\). Như vậy, hai trị riêng tìm được là \(4\)\(1\). Để tìm các vector tương ứng, ta cần giải hệ

(18.2.5)\[\begin{split}\begin{bmatrix} 2 & 1\\ 2 & 3 \end{bmatrix}\begin{bmatrix}x \\ y\end{bmatrix} = \begin{bmatrix}x \\ y\end{bmatrix} \; \text{và} \; \begin{bmatrix} 2 & 1\\ 2 & 3 \end{bmatrix}\begin{bmatrix}x \\ y\end{bmatrix} = \begin{bmatrix}4x \\ 4y\end{bmatrix} .\end{split}\]

Ta thu được nghiệm tương ứng là hai vector \([1, -1]^\top\)\([1, 2]^\top\).

Ta có thể kiểm tra lại bằng đoạn mã với hàm numpy.linalg.eig xây dựng sẵn.

%matplotlib inline
from d2l import mxnet as d2l
from IPython import display
import numpy as np

np.linalg.eig(np.array([[2, 1], [2, 3]]))
(array([1., 4.]),
 array([[-0.70710678, -0.4472136 ],
        [ 0.70710678, -0.89442719]]))

Lưu ý rằng numpy chuẩn hóa các vector riêng để có độ dài bằng 1, trong khi các vector ta tìm được bằng cách giải phương trình có độ dài tùy ý. Thêm vào đó, việc chọn dấu cũng là tùy ý. Tuy nhiên, các vector được tính ra bởi thư viện sẽ song song với các vector có được bằng cách giải thủ công với cùng trị riêng.

18.2.2. Phân rã Ma trận

Hãy tiếp tục với ví dụ trước đó. Gọi

(18.2.6)\[\begin{split}\mathbf{W} = \begin{bmatrix} 1 & 1 \\ -1 & 2 \end{bmatrix},\end{split}\]

là ma trận có các cột là vector riêng của ma trận \(\mathbf{A}\). Gọi

(18.2.7)\[\begin{split}\boldsymbol{\Sigma} = \begin{bmatrix} 1 & 0 \\ 0 & 4 \end{bmatrix},\end{split}\]

là ma trận với các trị riêng tương ứng nằm trên đường chéo. Từ định nghĩa của trị riêng và vector riêng, ta có

(18.2.8)\[\mathbf{A}\mathbf{W} =\mathbf{W} \boldsymbol{\Sigma} .\]

Ma trận \(W\) là khả nghịch, nên ta có thể nhân hai vế với \(W^{-1}\) về phía phải, để có

(18.2.9)\[\mathbf{A} = \mathbf{W} \boldsymbol{\Sigma} \mathbf{W}^{-1}.\]

Trong phần tiếp theo ta sẽ thấy một số hệ quả thú vị từ diều này, nhưng hiện giờ bạn đọc chỉ cần biết rằng tồn tại phân rã như vậy nếu ta có thể tìm tất cả các vector riêng độc lập tuyến tính (để ma trận \(W\) khả nghịch).

18.2.3. Các phép toán dùng Phân rã Trị riêng

Một điều thú vị về phân rã trị riêng (18.2.9) là ta có thể viết nhiều phép toán thường gặp một cách gọn gàng khi sử dụng phân rã trị riêng. Ví dụ đầu tiên, xét:

(18.2.10)\[\mathbf{A}^n = \overbrace{\mathbf{A}\cdots \mathbf{A}}^{\text{$n$ times}} = \overbrace{(\mathbf{W}\boldsymbol{\Sigma} \mathbf{W}^{-1})\cdots(\mathbf{W}\boldsymbol{\Sigma} \mathbf{W}^{-1})}^{\text{$n$ times}} = \mathbf{W}\overbrace{\boldsymbol{\Sigma}\cdots\boldsymbol{\Sigma}}^{\text{$n$ times}}\mathbf{W}^{-1} = \mathbf{W}\boldsymbol{\Sigma}^n \mathbf{W}^{-1}.\]

Điều này cho thấy khi lũy thừa ma trận với bất kỳ số mũ dương nào, ta chỉ cần lũy thừa các trị riêng lên cùng số mũ nếu sử dụng phân rã trị riêng. Tương tự, cũng có thể áp dụng cho các số mũ âm, khi nghịch đảo ma trận ta có

(18.2.11)\[\mathbf{A}^{-1} = \mathbf{W}\boldsymbol{\Sigma}^{-1} \mathbf{W}^{-1},\]

hay nói cách khác, chỉ cần nghịch đảo từng trị riêng, với điều kiện các trị riêng khác không. Do đó sự khả nghịch tương đương với việc không có trị riêng nào bằng không.

Thật vậy, có thể chứng minh rằng nếu \(\lambda_1, \ldots, \lambda_n\) là các trị riêng của một ma trận, định thức của ma trận đó là tích của tất cả các trị riêng:

(18.2.12)\[\det(\mathbf{A}) = \lambda_1 \cdots \lambda_n,\]

Điều này hợp lý về trực giác vì dù ma trận \(\mathbf{W}\) có kéo giãn như thế nào thì \(W^{-1}\) cũng sẽ hoàn tác hành động đó, vì thế cuối cùng phép kéo giãn duy nhất được áp dụng là nhân với ma trận đường chéo \(\boldsymbol{\Sigma}\). Phép nhân này sẽ kéo giãn thể tích không gian với hệ số bằng tích của các phần tử trên đường chéo.

Cuối cùng, ta hãy nhớ lại rằng hạng của ma trận là số lượng tối đa các vector cột độc lập tuyến tính trong một ma trận. Bằng cách nghiên cứu kỹ phân rã trị riêng, ta có thể thấy rằng hạng của \(\mathbf{A}\) bằng số lượng các trị riêng khác không của \(\mathbf{A}\).

Trước khi tiếp tục, hy vọng bạn đọc đã hiểu được ý tưởng: phân rã trị riêng có thể đơn giản hóa nhiều phép tính đại số tuyến tính và là một phép toán cơ bản phía sau nhiều thuật toán số và phân tích trong đại số tuyến tính.

18.2.4. Phân rã trị riêng của Ma trận Đối xứng

Không phải lúc nào ta cũng có thể tìm đủ các vector riêng độc lập tuyến tính để thuật toán phía trên hoạt động. Ví dụ ma trận sau

(18.2.13)\[\begin{split}\mathbf{A} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix},\end{split}\]

chỉ có duy nhất một vector riêng là \((1, 0)^\top\). Để xử lý những ma trận như vậy, ta cần những kỹ thuật cao cấp hơn (ví dụ như dạng chuẩn Jordan - Jordan Normal Form, hay phân rã đơn trị - Singular Value Decomposition). Ta thường phải giới hạn mức độ và chỉ tập trung đến những ma trận mà ta có thể đảm bảo rằng có tồn tại một tập đầy đủ vector riêng.

Họ vector thường gặp nhất là ma trận đối xứng, là những ma trận mà \(\mathbf{A} = \mathbf{A}^\top\). Trong trường hợp này, ta có thể lấy \(W\)ma trận trực giao - ma trận có các cột là các vector có độ dài bằng một và vuông góc với nhau, đồng thời \(\mathbf{W}^\top = \mathbf{W}^{-1}\) - và tất cả các trị riêng là số thực. Trong trường hợp đặc biệt này, ta có thể viết (18.2.9) như sau

(18.2.14)\[\mathbf{A} = \mathbf{W}\boldsymbol{\Sigma}\mathbf{W}^\top .\]

18.2.5. Định lý Vòng tròn Gershgorin

Các trị riêng thường rất khó để suy luận bằng trực giác. Nếu tồn tại một ma trận bất kỳ, ta khó có thể nói được gì nhiều về các trị riêng nếu không tính toán chúng ra. Tuy nhiên, tồn tại một định lý giúp dễ dàng xấp xỉ tốt trị riêng nếu các giá trị lớn nhất của ma trận nằm trên đường chéo.

Cho \(\mathbf{A} = (a_{ij})\) là ma trận vuông bất kỳ với kích thước \(n\times n\). Đặt \(r_i = \sum_{j \neq i} |a_{ij}|\). Cho \(\mathcal{D}_i\) biểu diễn hình tròn trong mặt phẳng phức với tâm \(a_{ii}\), bán kính \(r_i\). Khi đó, mỗi trị riêng của \(\mathbf{A}\) được chứa trong một \(\mathcal{D}_i\).

Điều này có thể hơi khó hiểu, nên hãy quan sát ví dụ sau. Xét ma trận:

(18.2.15)\[\begin{split}\mathbf{A} = \begin{bmatrix} 1.0 & 0.1 & 0.1 & 0.1 \\ 0.1 & 3.0 & 0.2 & 0.3 \\ 0.1 & 0.2 & 5.0 & 0.5 \\ 0.1 & 0.3 & 0.5 & 9.0 \end{bmatrix}.\end{split}\]

Ta có \(r_1 = 0.3\), \(r_2 = 0.6\), \(r_3 = 0.8\)\(r_4 = 0.9\). Ma trận này là đối xứng nên tất cả các trị riêng đều là số thực. Điều này có nghĩa tất cả các trị riêng sẽ nằm trong một trong các khoảng sau

(18.2.16)\[[a_{11}-r_1, a_{11}+r_1] = [0.7, 1.3],\]
(18.2.17)\[[a_{22}-r_2, a_{22}+r_2] = [2.4, 3.6],\]
(18.2.18)\[[a_{33}-r_3, a_{33}+r_3] = [4.2, 5.8],\]
(18.2.19)\[[a_{44}-r_4, a_{44}+r_4] = [8.1, 9.9].\]

Thực hiện việc tính toán số ta có các trị riêng xấp xỉ là \(0.99\), \(2.97\), \(4.95\), \(9.08\), đều nằm hoàn toàn trong các khoảng trên.

A = np.array([[1.0, 0.1, 0.1, 0.1],
              [0.1, 3.0, 0.2, 0.3],
              [0.1, 0.2, 5.0, 0.5],
              [0.1, 0.3, 0.5, 9.0]])

v, _ = np.linalg.eig(A)
v
array([9.08033648, 0.99228545, 4.95394089, 2.97343718])

Bằng cách này, các trị riêng có thể được xấp xỉ khá chính xác trong trường hợp các phần tử trên đường chéo lớn hơn hẳn so với các phần tử còn lại.

Điều này tuy nhỏ nhưng với một chủ đề phức tạp và tinh vi như phân rã trị riêng, thật tốt nếu có thể hiểu bất kỳ điều gì theo cách trực quan.

18.2.6. Một Ứng dụng hữu ích: Mức tăng trưởng của các Ánh xạ Lặp lại

Giờ ta đã hiểu bản chất của vector riêng, hãy xem có thể sử dụng chúng như thế nào để hiểu sâu hơn một vấn đề quan trọng trong mạng nơ-ron: khởi tạo trọng số thích hợp.

18.2.6.1. Vector riêng biểu thị Hành vi Dài hạn

Tìm hiểu đầy đủ về cách khởi tạo mạng nơ-ron dưới góc nhìn toán học nằm ngoài phạm vi phần này, tuy vậy ta có thể phân tích một ví dụ đơn giản dưới đây để xem các trị riêng giúp ta hiểu cách các mô hình hoạt động như thế nào. Như đã biết, mạng nơ-ron hoạt động bằng cách xen kẽ các phép biến đổi tuyến tính và phi tuyến. Để đơn giản, ở đây ta giả sử không có biến đổi phi tuyến và phép biến đổi chỉ là việc liên tục áp dụng ma trận \(A\), do đó đầu ra của mô hình là

(18.2.20)\[\mathbf{v}_{out} = \mathbf{A}\cdot \mathbf{A}\cdots \mathbf{A} \mathbf{v}_{in} = \mathbf{A}^N \mathbf{v}_{in}.\]

Khi mô hình trên được khởi tạo, \(A\) nhận các giá trị ngẫu nhiên theo phân phối Gauss. Lấy ví dụ cụ thể, ta bắt đầu bằng một ma trận kích thước \(5 \times 5\) với giá trị trung bình bằng 0, phương sai bằng 1.

np.random.seed(8675309)

k = 5
A = np.random.randn(k, k)
A
array([[ 0.58902366,  0.73311856, -1.1621888 , -0.55681601, -0.77248843],
       [-0.16822143, -0.41650391, -1.37843129,  0.74925588,  0.17888446],
       [ 0.69401121, -1.9780535 , -0.83381434,  0.56437344,  0.31201299],
       [-0.87334496,  0.15601291, -0.38710108, -0.23920821,  0.88850104],
       [ 1.29385371, -0.76774106,  0.20131613,  0.91800842,  0.38974115]])

18.2.6.2. Hành vi trên Dữ liệu Ngẫu nhiên

Trong mô hình đơn giản, ta giả sử rằng vector dữ liệu ta đưa vào \(\mathbf{v}_{in}\) là một vector Gauss ngẫu nhiên năm chiều. Hãy thử nghĩ xem ta sẽ muốn điều gì xảy ra. Trong ngữ cảnh này, hãy liên tưởng tới một bài toán học máy nói chung, trong đó ta đang cố biến dữ liệu đầu vào, như một ảnh, thành một dự đoán, như xác suất ảnh đó là bức ảnh một con mèo. Nếu việc áp dụng liên tục \(\mathbf{A}\) khiến một vector ngẫu nhiên bị kéo giãn lên quá dài thì chỉ với một thay đổi nhỏ trên đầu vào cũng có thể khuếch đại thành một thay đổi lớn trên đầu ra – các sự biến đổi nhỏ trên ảnh đầu vào cũng có thể dẫn tới các dự đoán khác hẳn nhau. Việc này dường như không hợp lý chút nào!

Trái lại, nếu \(\mathbf{A}\) khiến các vector ngẫu nhiên co ngắn lại, thì sau khi đi qua nhiều tầng, vector này về cơ bản sẽ co đến mức chẳng còn lại gì, và đầu ra sẽ không còn phụ thuộc vào đầu vào. Rõ ràng việc này cũng không hề hợp lý!

Ta cần tìm ra ranh giới giữa tăng trưởng và suy giảm để đảm bảo rằng thay đổi ở đầu ra phụ thuộc vào đầu vào, nhưng cũng không quá phụ thuộc!

Hãy xem chuyện gì sẽ xảy ra nếu ta liên tục nhân ma trận \(\mathbf{A}\) với một vector đầu vào ngẫu nhiên, và theo dõi giá trị chuẩn (norm).

# Calculate the sequence of norms after repeatedly applying `A`
v_in = np.random.randn(k, 1)

norm_list = [np.linalg.norm(v_in)]
for i in range(1, 100):
    v_in = A.dot(v_in)
    norm_list.append(np.linalg.norm(v_in))

d2l.plot(np.arange(0, 100), norm_list, 'Iteration', 'Value')
../_images/output_eigendecomposition_vn_fdbc53_7_0.svg

Giá trị chuẩn tăng một cách không thể kiểm soát được! Quả thật, nếu ta lấy ra danh sách các tỉ số, ta sẽ thấy một khuôn mẫu.

# Compute the scaling factor of the norms
norm_ratio_list = []
for i in range(1, 100):
    norm_ratio_list.append(norm_list[i]/norm_list[i - 1])

d2l.plot(np.arange(1, 100), norm_ratio_list, 'Iteration', 'Ratio')
../_images/output_eigendecomposition_vn_fdbc53_9_0.svg

Nếu ta quan sát phần cuối của phép tính trên, ta có thể thấy rằng vector ngẫu nhiên bị kéo giãn với hệ số là 1.974459321485[...], với phần số thập phân ở cuối có thay đổi một chút, nhưng hệ số kéo giãn thì ổn định.

18.2.6.3. Liên hệ Ngược lại tới Vector riêng

Ta đã thấy rằng vector riêng và trị riêng tương ứng với mức độ co giãn của thứ gì đó, nhưng chỉ đối với các vector cụ thể và các phép co giãn cụ thể. Hãy cùng xét xem chúng là gì đối với \(\mathbf{A}\). Nói trước một chút: hóa ra là để có thể quan sát được mọi giá trị, ta cần xét tới số phức. Bạn có thể coi số phức như phép co giãn và phép quay. Bằng cách tính chuẩn của số phức (căn bậc hai của tổng bình phương phần thực và phần ảo), ta có thể đo hệ số co giãn. Hãy sắp xếp chúng theo thứ tự.

# Compute the eigenvalues
eigs = np.linalg.eigvals(A).tolist()
norm_eigs = [np.absolute(x) for x in eigs]
norm_eigs.sort()
print(f'norms of eigenvalues: {norm_eigs}')
norms of eigenvalues: [0.8786205280381857, 1.2757952665062624, 1.4983381517710659, 1.4983381517710659, 1.974459321485074]

18.2.6.4. Nhận xét

Ta quan sát thấy một chút bất thường ở đây: hệ số mà ta đã xác định cho quá trình giãn về dài hạn khi áp dụng ma trận \(\mathbf{A}\) lên một vector ngẫu nhiên lại chính là trị riêng lớn nhất của \(\mathbf{A}\) (chính xác đến 13 số thập phân). Điều này rõ ràng không phải một sự trùng hợp.

Tuy nhiên, nếu ta thực sự suy ngẫm chuyện gì đang xảy ra trên phương diện hình học, điều này bắt đầu trở nên hợp lý. Xét một vector ngẫu nhiên. Vector ngẫu nhiên này trỏ tới mỗi hướng một chút, nên cụ thể, nó chút ít cũng trỏ tới cùng hướng với vector riêng của \(\mathbf{A}\) tương ứng với trị riêng lớn nhất. Trị riêng và vector riêng này quan trọng đến mức chúng được gọi là trị riêng chính (principle eigenvalue)vector riêng chính (principle eigenvector). Sau khi áp dụng \(\mathbf{A}\), vector ngẫu nhiên trên bị giãn ra theo mọi hướng khả dĩ, do nó liên kết với mọi vector riêng khả dĩ, nhưng nó bị giãn nhiều nhất theo hướng liên kết với vector riêng chính. Điều này có nghĩa là sau khi áp dụng \(A\), vector ngẫu nhiên trên dài ra, và ngày càng cùng hướng với vector riêng chính. Sau khi áp dụng ma trận nhiều lần, vector ngẫu nhiên ngày càng gần vector riêng chính cho tới khi vector này gần như trở thành vector riêng chính. Đây chính là cơ sở cho thuật toán lặp lũy thừa - (power iteration) để tìm trị riêng và vector riêng lớn nhất của một ma trận. Để biết chi tiết hơn, bạn đọc có thể tham khảo tại [VanLoan & Golub, 1983].

18.2.6.5. Khắc phục bằng Chuẩn hóa

Từ phần thảo luận trên, lúc này ta kết luận rằng ta không hề muốn một vector ngẫu nhiên bị giãn hoặc co lại, mà ta muốn vector ngẫu nhiên giữ nguyên kích thước trong suốt toàn bộ quá trình tính toán. Để làm được điều đó, ta cần tái tỷ lệ ma trận bằng cách chia cho trị riêng chính, tức sao cho trị riêng lớn nhất giờ có giá trị 1. Hãy xem chuyện gì sẽ xảy ra trong trường hợp này.

# Rescale the matrix `A`
A /= norm_eigs[-1]

# Do the same experiment again
v_in = np.random.randn(k, 1)

norm_list = [np.linalg.norm(v_in)]
for i in range(1, 100):
    v_in = A.dot(v_in)
    norm_list.append(np.linalg.norm(v_in))

d2l.plot(np.arange(0, 100), norm_list, 'Iteration', 'Value')
../_images/output_eigendecomposition_vn_fdbc53_13_0.svg

Ta cũng có thể vẽ đồ thị tỷ lệ các chuẩn liên tiếp như trước và quan sát được rằng nó đã ổn định.

# Also plot the ratio
norm_ratio_list = []
for i in range(1, 100):
    norm_ratio_list.append(norm_list[i]/norm_list[i-1])

d2l.plot(np.arange(1, 100), norm_ratio_list, 'Iteration', 'Ratio')
../_images/output_eigendecomposition_vn_fdbc53_15_0.svg

18.2.7. Kết luận

Giờ ta có thể thấy được điều mà ta mong muốn! Sau khi chuẩn hóa ma trận bằng trị riêng chính, ta thấy rằng dữ liệu ngẫu nhiên không còn bùng nổ như trước nữa, thay vào đó nó cân bằng quanh một giá trị nhất định. Sẽ thật tuyệt nếu ta có thể thực hiện việc này bằng các định đề cơ bản, và hóa ra là nếu ta tìm hiểu sâu về mặt toán học của nó, ta có thể thấy rằng trị riêng lớn nhất của một ma trận ngẫu nhiên lớn với các phần tử tuân theo phân phối Gauss một cách độc lập với kỳ vọng bằng 0, phương sai bằng 1, về trung bình sẽ xấp xỉ bằng \(\sqrt{n}\), hay trong trường hợp của ta là \(\sqrt{5} \approx 2.2\), tuân theo một định luật thú vị là luật vòng tròn (circular law) [Ginibre, 1965]. Mối quan hệ giữa các trị riêng (và một đại lượng liên quan được gọi là trị đơn (singular value)) của ma trận ngẫu nhiên đã được chứng minh là có liên hệ sâu sắc tới việc khởi tạo mạng nơ-ron một cách thích hợp như đã thảo luận trong [Pennington et al., 2017] và các nghiên cứu liên quan sau đó.

18.2.8. Tóm tắt

  • Vector riêng là các vector bị giãn bởi một ma trận mà không thay đổi hướng.
  • Trị riêng là mức độ mà các vector riêng đó bị giãn bởi việc áp dụng ma trận.
  • Phân rã trị riêng của ma trận cho phép nhiều phép toán trên ma trận có thể được rút gọn thành các phép toán trên trị riêng.
  • Định lý Đường tròn Gershgorin (Gershgorin Circle Theorem) có thể cung cấp giá trị xấp xỉ cho các trị riêng của một ma trận.
  • Hành vi của phép lặp lũy thừa cho ma trận chủ yếu phụ thuộc vào độ lớn của trị riêng lớn nhất. Điều này có rất nhiều ứng dụng trong lý thuyết khởi tạo mạng nơ-ron.

18.2.9. Bài tập

  1. Tìm các trị riêng và vector riêng của
(18.2.21)\[\begin{split}\mathbf{A} = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}?\end{split}\]
  1. Tìm các trị riêng và vector riêng của ma trận sau đây, và cho biết có điều gì lạ ở ví dụ này so với ví dụ trước?
(18.2.22)\[\begin{split}\mathbf{A} = \begin{bmatrix} 2 & 1 \\ 0 & 2 \end{bmatrix}.\end{split}\]
  1. Không tính các trị riêng, trị riêng nhỏ nhất của ma trận sau có nhỏ hơn \(0.5\) được không? Ghi chú: bài tập này có thể nhẩm được trong đầu.
(18.2.23)\[\begin{split}\mathbf{A} = \begin{bmatrix} 3.0 & 0.1 & 0.3 & 1.0 \\ 0.1 & 1.0 & 0.1 & 0.2 \\ 0.3 & 0.1 & 5.0 & 0.0 \\ 1.0 & 0.2 & 0.0 & 1.8 \end{bmatrix}.\end{split}\]

18.2.10. Thảo luận

18.2.11. Những người thực hiện

Bản dịch trong trang này được thực hiện bởi:

  • Đoàn Võ Duy Thanh
  • Trần Yến Thy
  • Nguyễn Văn Cường
  • Đỗ Trường Giang
  • Phạm Minh Đức
  • Lê Khắc Hồng Phúc