Đối với ViT, khi không có skip connection thì ma trận attention sẽ thành low rank, tức là các token khác nhau lại có attention weight giống nhau, dẫn đến hiện tượng oversmoothing, tức là feature của các token lại trở thành giống nhau (dễ hiểu hơn nếu bạn nhìn từ góc độ graph). Đối với large kernel cnn, kernel tại các vị trí khác nhau sẽ overlap nhiều, nên khi stack nhiều layer lại thì dễ gặp hiện tượng oversmoothing (hơn cnn với kernel nhỏ), tức là thông tin từ 2 vị trí khác nhau lại được aggregate từ 1 tập tương đối giống nhau. Về mặt trực quan thì khi thêm skip connection, thông tin từ các layer đầu sẽ được nhấn mạnh hơn, mà tại các layer đầu thì vùng được aggregate sẽ có tính phân biệt hơn các layer sau.
Về tính chất equivariance, thường chúng ta nghĩ rằng điều này thể hiện thay đổi input như thế nào thì output cũng đổi như vậy. Nhưng mình cho rằng nó nên được hiểu là input thay đổi thế nào thì output cũng thay đổi một cách tương đối theo không gian output. Lấy ví dụ là 1 phép downscale ảnh xuống kích cỡ một nửa, nếu input bị dịch 10px thì output sẽ bị dịch 5px chứ không phải 10px. Từ góc nhìn này, nếu sự thay đổi ở input biểu diễn bởi 1 phép identity ở không gian output, ta có thể xem invariance là 1 trường hợp của equivariance.
mình thấy tác giả lấy cố định chỉ số dòng 1 và dòng 2 là 40, nếu giả sử ảnh detect biển số quá lớn hoặc quá bé thì nó sẽ ko chia đúng vào dòng 1 và dòng 2.
"Although large-kernel CNNs may degenerate in a different mechanism from ViT’s, we also observed without shortcut, it is difficult for the network to capture local details." Cái này là do nhóm tác giả quan sát và đưa ra kết luận, còn theo như mình biết thì chính chủ của skip connection - Kaiming He sử dụng nó với mục đích đưa gradient flow backward và fordward dễ hơn trong mạng => model dễ tối ưu hóa hơn. Nếu như theo lối suy nghĩ này thì shortcuts giúp gradient đi sâu hơn lúc backprop -> những layer đầu cũng nhận được nhiều gradient signal hơn là model không có shortcuts, từ đó dễ học được local information. Bạn có thể refer đến bài này của tác giả : Identity Mappings in Deep Residual Networks
Các model CNN Classifier có 2 tính chất chính là translation equivariant và translation invariant. Một model mạnh thì 2 tính chất trên phải càng mạnh. Với tính chất translation equivariant thì càng gần input layer -> cầng gần spatial domain -> tính spatial equivariance phải cành mạnh -> cho phép tạo ra feature map đủ thông tin spatial (edge, texture, shape), tính chất này được tạo bởi các lớp conv + nonlinear. Đồng thời, tính chất translation invariant được tạo bởi các lớp Pooling, càng về sau thì trong feature map dần ít đi thông tin spatial mà thay vào đó là context, dó đó các lớp pooling mang nhiệm vụ tổng hợp thông tin quan trọng -> biến nó thành semantic feature, gói gọn nó cho lớp MLP (một phần cũng vì MLP khá nhạy cảm với thông tin spatial, nếu như để quá nhiều thì model sẽ bị ảnh hưởng khi object trong ảnh dịch chuyển như bạn nói). "tính chất này giúp performance của mạng không bị ảnh hưởng nhiều nếu object trong ảnh bị dịch chuyển" có lẽ cách diễn giải này của mình làm bạn thắc mắc, nhưng ý của mình muốn nói là tính chất này vẫn là một tính chất rất quan trọng mà mạng CNN cần có.
"we also find when the pretraining dataset increases to 73 million images (refer to RepLKNet-XL in the next section), re-parameterization can be omitted without degradation" câu này theo ý tác giả thì là khi train với 73 triệu ảnh, có thể bỏ re-param mà không làm giảm performance. Tức là vẫn giữ các nhánh phụ, mình cũng không rõ mình có hiểu đúng ý tác giả hay không :v sorry bạn vì câu này mình không trả lời rõ ràng được.
Nếu như bạn đọc 2 paper visual attention network và segnext rồi thì sẽ thấy cách làm này có vẻ khá tương tự như 2 paper trên. Cách này giúp model vẫn có performance của conventional convolution kxk, nhưng computation cost có thể giảm đi !? Còn 1 cách giải thích chi tiết hơn là cách này giúp computation cost có thể giảm xuống, vì khi sử dụng DW 3x3 khối lượng tính toán ít hơn conv 3x3 thông thường rât nhiều nhưng giữa các channel lại thiếu sự giao tiếp với nhau nếu như bạn hiểu cách depth-wise conv và conventional conv làm việc, do đó việc dùng conv 1x1 là để tăng tính interactive giữa các channel. Tóm tắt lại thì cách làm này giúp model giữ performance đồng thời giảm computational cost.
Tất cả những câu trả lời trên của mình đều được đưa ra dựa trên kiến thức cá nhân, nên nếu có chỗ nào sai sót thì mong bạn góp ý thêm. Cảm ơn bạn rất nhiều, rất mong nhận được phản hồi từ bạn.
"Cũng tương tự cho CNN, khi không có shortcut, mạng sẽ rất khó để bắt được local information" mong tác giả của bài viết giải thích hộ mình điều này với, mình vẫn chưa rõ tại sao lại như thế?
"Phương pháp này sẽ giúp gia cố tính chất translational equivariance (tính chất này giúp performance của mạng không bị ảnh hưởng nhiều nếu object trong ảnh bị dịch chuyển)". Mình không hiểu rõ chỗ này lắm, mình tưởng nếu tính translation equivariance mạnh thì output của mạng sẽ bị thay đổi khá nhiều nếu object trong ảnh dịch chuyển chứ nhỉ?
"Khi pretrained với tập dữ liệu 73 triệu ảnh (RepLKNet-XL) thì có thể bỏ re-param mà không làm giảm hiệu năng." Tức là lúc này RepLKNet chỉ sử dụng thuần 1 nhánh large kernel thay vì large kernel + 3x3 Conv phải không ạ?
Ở guide line 5, làm thế nào để có thể áp dụng kernel lớn hơn feature maps vậy ạ?
"DW 3×3 được thêm vào để lấy low-level pattern". Theo mình thì sử dụng 3x3 Conv thông thường ở đoạn đầu của model thì cũng có thể lấy được low-level pattern mà nhỉ, và hiệu năng của nó cũng tốt hơn là DWConv nữa. Thêm nữa, khi sử dụng DWConv thì lại còn phải đưa thêm vào 1x1 Conv phía sau đó. Tại sao lại không sử dụng 3x3 Conv ở đoạn này ạ?
THẢO LUẬN
bạn ơi bạn dùng version trả phí nên host làm nhiều app django được à
Đối với ViT, khi không có skip connection thì ma trận attention sẽ thành low rank, tức là các token khác nhau lại có attention weight giống nhau, dẫn đến hiện tượng oversmoothing, tức là feature của các token lại trở thành giống nhau (dễ hiểu hơn nếu bạn nhìn từ góc độ graph). Đối với large kernel cnn, kernel tại các vị trí khác nhau sẽ overlap nhiều, nên khi stack nhiều layer lại thì dễ gặp hiện tượng oversmoothing (hơn cnn với kernel nhỏ), tức là thông tin từ 2 vị trí khác nhau lại được aggregate từ 1 tập tương đối giống nhau. Về mặt trực quan thì khi thêm skip connection, thông tin từ các layer đầu sẽ được nhấn mạnh hơn, mà tại các layer đầu thì vùng được aggregate sẽ có tính phân biệt hơn các layer sau.
Về tính chất equivariance, thường chúng ta nghĩ rằng điều này thể hiện thay đổi input như thế nào thì output cũng đổi như vậy. Nhưng mình cho rằng nó nên được hiểu là input thay đổi thế nào thì output cũng thay đổi một cách tương đối theo không gian output. Lấy ví dụ là 1 phép downscale ảnh xuống kích cỡ một nửa, nếu input bị dịch 10px thì output sẽ bị dịch 5px chứ không phải 10px. Từ góc nhìn này, nếu sự thay đổi ở input biểu diễn bởi 1 phép identity ở không gian output, ta có thể xem invariance là 1 trường hợp của equivariance.
đây nhé bạn - https://devopsvn.tech/devops/nhung-cuon-sach-nen-doc-de-hoc-kubernetes-cho-nguoi-moi-bat-dau#ccc6a2e544b743ad8d9b116a57fd956b
@maitrungduc1410 Anh cho em hỏi bài trước khi Dockerize Laravel em thấy có dùng nginx sao bên này lại không dùng vậy ạ.
đúng rồi bạn nhưng thư viện này build trên rust nhé
Dùng Kubernetes đó: https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/
Cho ra part 2 đi bác, hay quá
@KevinChu Cảm ơn bạn nhiều. Có phần mềm nào tương tự như OpenShift mà máy chủ dùng Window không bạn nhỉ?
Openshift có 2 phiên bản. Bản Origin thì dùng Fedora CoreOS (FCOS). Bản Enterprise thì dùng Red Hat Enterprise Linux CoreOS (RHCOS)
Bạn cho hỏi:
à giải pháp là thêm AWS_URL=http://localhost:9000/laravel-local vào env
mình bị lỗi khi dùng docker compose là khi get url nó sẽ trả về link kiểu http://minio:9000/laravel-local/content.txt chứ không phải http://localhost:9000/laravel-local/content.txt nên không thể truy cập được bên ngoài docker 😓
mình thấy tác giả lấy cố định chỉ số dòng 1 và dòng 2 là 40, nếu giả sử ảnh detect biển số quá lớn hoặc quá bé thì nó sẽ ko chia đúng vào dòng 1 và dòng 2.
Mảng Mũi têncó phải giốngvector trong C++phải k bạn"Although large-kernel CNNs may degenerate in a different mechanism from ViT’s, we also observed without shortcut, it is difficult for the network to capture local details." Cái này là do nhóm tác giả quan sát và đưa ra kết luận, còn theo như mình biết thì chính chủ của skip connection - Kaiming He sử dụng nó với mục đích đưa gradient flow backward và fordward dễ hơn trong mạng => model dễ tối ưu hóa hơn. Nếu như theo lối suy nghĩ này thì shortcuts giúp gradient đi sâu hơn lúc backprop -> những layer đầu cũng nhận được nhiều gradient signal hơn là model không có shortcuts, từ đó dễ học được local information. Bạn có thể refer đến bài này của tác giả : Identity Mappings in Deep Residual Networks
Các model CNN Classifier có 2 tính chất chính là translation equivariant và translation invariant. Một model mạnh thì 2 tính chất trên phải càng mạnh. Với tính chất translation equivariant thì càng gần input layer -> cầng gần spatial domain -> tính spatial equivariance phải cành mạnh -> cho phép tạo ra feature map đủ thông tin spatial (edge, texture, shape), tính chất này được tạo bởi các lớp conv + nonlinear. Đồng thời, tính chất translation invariant được tạo bởi các lớp Pooling, càng về sau thì trong feature map dần ít đi thông tin spatial mà thay vào đó là context, dó đó các lớp pooling mang nhiệm vụ tổng hợp thông tin quan trọng -> biến nó thành semantic feature, gói gọn nó cho lớp MLP (một phần cũng vì MLP khá nhạy cảm với thông tin spatial, nếu như để quá nhiều thì model sẽ bị ảnh hưởng khi object trong ảnh dịch chuyển như bạn nói). "tính chất này giúp performance của mạng không bị ảnh hưởng nhiều nếu object trong ảnh bị dịch chuyển" có lẽ cách diễn giải này của mình làm bạn thắc mắc, nhưng ý của mình muốn nói là tính chất này vẫn là một tính chất rất quan trọng mà mạng CNN cần có.
"we also find when the pretraining dataset increases to 73 million images (refer to RepLKNet-XL in the next section), re-parameterization can be omitted without degradation" câu này theo ý tác giả thì là khi train với 73 triệu ảnh, có thể bỏ re-param mà không làm giảm performance. Tức là vẫn giữ các nhánh phụ, mình cũng không rõ mình có hiểu đúng ý tác giả hay không :v sorry bạn vì câu này mình không trả lời rõ ràng được.
Ví dụ kích thước feature map là 7x7. Nếu muốn sử dụng conv có kernel 13x13 với feature map này thì chắc là phải có padding đấy ạ
Trong code thì tác giả muốn giữ nguyên kích thước feature map nên để padding kernel_size//2 (https://github.com/DingXiaoH/RepLKNet-pytorch/blob/b76808ac2c763eaed6af9d286c6163c9345b4d5f/replknet.py#L86)
Nếu như bạn đọc 2 paper visual attention network và segnext rồi thì sẽ thấy cách làm này có vẻ khá tương tự như 2 paper trên. Cách này giúp model vẫn có performance của conventional convolution kxk, nhưng computation cost có thể giảm đi !? Còn 1 cách giải thích chi tiết hơn là cách này giúp computation cost có thể giảm xuống, vì khi sử dụng DW 3x3 khối lượng tính toán ít hơn conv 3x3 thông thường rât nhiều nhưng giữa các channel lại thiếu sự giao tiếp với nhau nếu như bạn hiểu cách depth-wise conv và conventional conv làm việc, do đó việc dùng conv 1x1 là để tăng tính interactive giữa các channel. Tóm tắt lại thì cách làm này giúp model giữ performance đồng thời giảm computational cost.
Tất cả những câu trả lời trên của mình đều được đưa ra dựa trên kiến thức cá nhân, nên nếu có chỗ nào sai sót thì mong bạn góp ý thêm. Cảm ơn bạn rất nhiều, rất mong nhận được phản hồi từ bạn.
Bài viết hay, em đang tìm hiểu về CRDs của K8S, không biết bác có gợi ý nào về sách hoặc tutorials nào hay cho em với ạ.
.
@nampt.me ,làm sao để dùng tiếp khi hết 500 giờ
Các bạn tham khảo website kiến thức chuyên môn về bao bì nhé: https://ipak.vn/